Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ncskiber от Февраль 12, 2009, 13:39



Название: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: ncskiber от Февраль 12, 2009, 13:39
Всем Привет!

Вопрос:
Перед загрузкой основного окна (MainWindow) запускается модальное диалоговое окно.
Пользователь вводит данные и по результату Accept данные далее  передаются приложению и запускается основное окно, диалог уничтожается. Это сделано.
Если данные после Accept переданные приложению не корректные, то заново запускается диалоговое окно, основное нет. Это сделано.
Необходимо по Reject после закрытия окна диалога закрыть всю программу, т.е. закрыть основное окно.  Это не получается сделать. Пробовал, как отдельный объект диалога перед основным окном, так и в составе основного окна, как член класса.
Не понимаю, как послать сигнал после закрытия диалога.
Пробовал через   closeEvent(QCloseEvent *event) основного окна, не получается.
Пробывал так:

Код
C++ (Qt)
Main()
{
MyDialog * link;
QObject::connect(link, SIGNAL(rejected()), &app, SLOT(close()));
}

Так

Код
C++ (Qt)
В MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{

Link = new MyDialog;
connect(link, SIGNAL(rejected()), qApp, SLOT(closeAllWindows()));
или так  connect(link, SIGNAL(rejected()), this, SLOT(closeAllWindows()));
}

Как это делается?
Заранее благодарю.


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: pastor от Февраль 12, 2009, 13:46
А если так:

Код
C++ (Qt)
main(...)
{
    QApplication app(...);
    MyDialog dlg;
    if ( dlg.exec() == QDialog::Rejected)
        return 0;
 
    //show main window
 
    return app.exec();
}


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: BRE от Февраль 12, 2009, 14:17
Или так:
Код
C++ (Qt)
connect( link, SIGNAL( rejected() ), qApp, SLOT( quit() ) );
 


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: ncskiber от Февраль 12, 2009, 16:36
Спасибо, удивился до безобразия, что так просто с вариантом return 0;  ;D

а вариант connect( link, SIGNAL( rejected() ), qApp, SLOT( quit() ) ); к сожалению, не сработал.

спасибо всем, воспользуюсь первым самым простым способом.


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: pastor от Февраль 12, 2009, 17:17
а вариант connect( link, SIGNAL( rejected() ), qApp, SLOT( quit() ) ); к сожалению, не сработал.

несрабатывает потому, что незапущен event loop, когда происходит событие rejected


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: developer от Февраль 13, 2009, 14:39
Цитировать
несрабатывает потому, что незапущен event loop, когда происходит событие rejected
не совсем понял, а как его запустить, или как проверить что он не запущен


Название: Re: Закрытие программы (основного окна) в модальном диалоговом окне
Отправлено: BRE от Февраль 13, 2009, 14:43
Цитировать
несрабатывает потому, что незапущен event loop, когда происходит событие rejected
не совсем понял, а как его запустить, или как проверить что он не запущен
Основной цикл событий запускается функцией QCoreApplication::exec(), точнее в ней он выполняется.
У тебя она в main() прописана.
Все что выполняется до нее, выполняется с не запущенным циклом событий (как закрутил).  :)