Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: QT4: многооконное приложение  (Прочитано 1154 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
QT4: многооконное приложение
« : 08 Январь 2012, 20:41:06 »
Здравствуйте!
Начал учить QT4, а для любой учёбы нужна практика.
Что имею на данный момент: есть 2 формы (MainWindow и AboutWindow).
Первое принадлежит одноимённому классу, второй QDialog (созданы в QTDesigner).
Создаю сигнал для кнопки и прикрепляю к ней действие открытия окна:

mainwindow.cpp:
Код: C++
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "activated.cpp"
  4.  
  5.  
  6.  
  7. MainWindow::MainWindow(QWidget *parent) :
  8.     QMainWindow(parent),
  9.     ui(new Ui::MainWindow)
  10. {
  11.     ui->setupUi(this);
  12. }
  13.  
  14. MainWindow::~MainWindow()
  15. {
  16.     delete ui;
  17. }
  18.  
  19. void MainWindow::on_Activate_clicked()
  20. {
  21. activateProcess pr;
  22. pr = 1;
  23. pr.start_active();
  24. }
  25.  
  26. void MainWindow::on_AboutW_activated()
  27. {
  28. AboutWindow ab;
  29. ab.show();
  30. }
  31.  

mainwindow.h:
Код: C++
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <QMainWindow>
  5. #include "aboutwindow.h"
  6.  
  7. namespace Ui {
  8.     class MainWindow;
  9. }
  10.  
  11. class MainWindow : public QMainWindow
  12. {
  13.     Q_OBJECT
  14.  
  15. public:
  16.     explicit MainWindow(QWidget *parent = 0);
  17.     ~MainWindow();
  18.  
  19. private slots:
  20.     void on_Activate_clicked();
  21.  
  22.     void on_AboutW_activated();
  23.  
  24. private:
  25.     Ui::MainWindow *ui;
  26. };
  27.  
  28. #endif // MAINWINDOW_H
  29.  

При попытке подключать не aboutwindow.h, а aboutwindow.cpp, получаю кучу ошибок.
При попытке открыть окно - 0 эффекта.
В чём ошибка?

PS, слот срабатывает. Проверял на классе activateProcess.
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: QT4: многооконное приложение
« Ответ #1 : 08 Январь 2012, 21:11:17 »
AboutWindow ab;
ab.exec();
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #2 : 08 Январь 2012, 21:19:12 »
AboutWindow ab;
ab.exec();

Угу. Спасибо. Помогло.
Такой вопрос: после закрытия этого окна память освобождается автоматически?

PS, уже нашёл и другое решение (через new). На вооружение теперь 2 метода. :)
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: QT4: многооконное приложение
« Ответ #3 : 08 Январь 2012, 21:20:53 »
1) Да. Так как объект создается статично.
2) Можно и через new, но тогда нужно не забыть про delete, так как в оперативке останется.

PS: первый лучше, имхо
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #4 : 08 Январь 2012, 21:22:42 »
1) Да. Так как объект создается статично.
2) Можно и через new, но тогда нужно не забыть про delete, так как в оперативке останется.

PS: первый лучше, имхо

Ещё раз спасибо.
Мне больше подходит exec(), так как нужно блокировать основное окно, так как открываемое должно быть с большим приоритетом, так сказать.
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #5 : 08 Январь 2012, 23:10:34 »
А теперь, дети, посмотрите как в первом посте создаётся и уничтожается окно и никогда так не делайте =)
Тоесть делать то можно, но пока не сможете доходчиво объяснить почему так, не делайте, ибо чревато.

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #6 : 08 Январь 2012, 23:26:22 »
А теперь, дети, посмотрите как в первом посте создаётся и уничтожается окно и никогда так не делайте =)
Тоесть делать то можно, но пока не сможете доходчиво объяснить почему так, не делайте, ибо чревато.

В первом посте оно не создаётся и не удаляется.  ;D
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #7 : 09 Январь 2012, 16:56:31 »
Да что ты говоришь =)
...
mainwindow.cpp:
Код: C++
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6. }
  7.  
  8. MainWindow::~MainWindow()
  9. {
  10.     delete ui;
  11. }
  12.  
...
Хочу обратить твоё внимание на new Ui::MainWindow и delete ui;
Не делай так, особенно если не понимаешь что к чему.

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #8 : 09 Январь 2012, 17:08:53 »
Да что ты говоришь =)
...
mainwindow.cpp:
Код: C++
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6. }
  7.  
  8. MainWindow::~MainWindow()
  9. {
  10.     delete ui;
  11. }
  12.  
...
Хочу обратить твоё внимание на new Ui::MainWindow и delete ui;
Не делай так, особенно если не понимаешь что к чему.

Это делал не я, а QTCreater.
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: QT4: многооконное приложение
« Ответ #9 : 09 Январь 2012, 17:27:52 »
Хочу обратить твоё внимание на new Ui::MainWindow и delete ui;
Не делай так, особенно если не понимаешь что к чему.
А что не так? Это же дефолт!
PS: я в общем ui не использую, просто интересно.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #10 : 10 Январь 2012, 06:24:34 »
...
Это делал не я, а QTCreater.
Хорошо отмазался. Но надо немного представлять что делает за тебя среда.

...
А что не так? Это же дефолт!
PS: я в общем ui не использую, просто интересно.
Легко потерять new или delete. или прошляпить исключение, и объект утечёт неизвестно куда, в лучшем случае.
Гораздо лучше делать как ты показывал. Локальная переменная, минимум области видимости, создал, попользовался и выкинул, любой ахтунг развернёт стек и выкинет объект.

 

Страница сгенерирована за 0.069 секунд. Запросов: 24.