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


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

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

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

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

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

mainwindow.cpp:
Код: (cpp) [Выделить]
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "activated.cpp"



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_Activate_clicked()
{
activateProcess pr;
pr = 1;
pr.start_active();
}

void MainWindow::on_AboutW_activated()
{
AboutWindow ab;
ab.show();
}

mainwindow.h:
Код: (cpp) [Выделить]
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "aboutwindow.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_Activate_clicked();

    void on_AboutW_activated();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

При попытке подключать не 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
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: QT4: многооконное приложение
« Ответ #1 : 08 Января 2012, 21:11:17 »
AboutWindow ab;
ab.exec();
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://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
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: QT4: многооконное приложение
« Ответ #3 : 08 Января 2012, 21:20:53 »
1) Да. Так как объект создается статично.
2) Можно и через new, но тогда нужно не забыть про delete, так как в оперативке останется.

PS: первый лучше, имхо
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://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:
Код: (cpp) [Выделить]
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
...
Хочу обратить твоё внимание на new Ui::MainWindow и delete ui;
Не делай так, особенно если не понимаешь что к чему.

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

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: QT4: многооконное приложение
« Ответ #8 : 09 Января 2012, 17:08:53 »
Да что ты говоришь =)
...
mainwindow.cpp:
Код: (cpp) [Выделить]
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

Оффлайн Yurror

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

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

 

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