Russian Qt Forum
Ноябрь 26, 2024, 08:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрытие программы (основного окна) в модальном диалоговом окне  (Прочитано 8543 раз)
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()));
}

Как это делается?
Заранее благодарю.
« Последнее редактирование: Февраль 12, 2009, 13:42 от pastor » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Февраль 12, 2009, 13:46 »

А если так:

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
BRE
Гость
« Ответ #2 : Февраль 12, 2009, 14:17 »

Или так:
Код
C++ (Qt)
connect( link, SIGNAL( rejected() ), qApp, SLOT( quit() ) );
 
Записан
ncskiber
Гость
« Ответ #3 : Февраль 12, 2009, 16:36 »

Спасибо, удивился до безобразия, что так просто с вариантом return 0;  Смеющийся

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

спасибо всем, воспользуюсь первым самым простым способом.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Февраль 12, 2009, 17:17 »

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

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
developer
Гость
« Ответ #5 : Февраль 13, 2009, 14:39 »

Цитировать
несрабатывает потому, что незапущен event loop, когда происходит событие rejected
не совсем понял, а как его запустить, или как проверить что он не запущен
Записан
BRE
Гость
« Ответ #6 : Февраль 13, 2009, 14:43 »

Цитировать
несрабатывает потому, что незапущен event loop, когда происходит событие rejected
не совсем понял, а как его запустить, или как проверить что он не запущен
Основной цикл событий запускается функцией QCoreApplication::exec(), точнее в ней он выполняется.
У тебя она в main() прописана.
Все что выполняется до нее, выполняется с не запущенным циклом событий (как закрутил).  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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