Здравствуйте, гость ( Вход | Регистрация )
igor_bogomolov | Дата 18.5.2009, 14:25 |
А вообще не понятно. Предположим юзер нажал на крестик, обработался слот closeEvent. В этом слоте выставляем флаг типа "все, Вась! Вылазим." Этот флаг проверяется в цикле forever(), из которого выходим по return или по break. Ну и все, фенита ля комедия. Так и собираюсь сделать. Только не через событие closeEvent (оно у меня и так переопределено. По нему приложение в трей сварачивается), а через свой слот.Только абзац из Бланшет теперь уж больно смущает. Да и почему такое поведение троли заложили, для безопасности чтоли? |
|
kwisp | Дата 18.5.2009, 14:19 |
Тогда стандартную ::exit(0) пробовать, хотя мне кажется это некорректным. если кроме флага и стандартного exit() нет ничего почему бы не воспользоваться. |
|
igor_bogomolov | Дата 18.5.2009, 14:17 |
QMetaObject::invokeMethod(qApp, "quit", Qt::DirectConnection); Не помогло. То же самое поведение, что и раньше.Ладно, спасибо всем за помощь. Буду выставлять флаг, по которому моя функция будет завершаться. |
|
SABROG | Дата 18.5.2009, 14:11 |
SABROG, ставлю 1р на то что не получится ибо было бы несправедливо по отношению к exit(0); Скорее всего ты прав. На сколько я помню слот quit() ставит в очередь event, который может обрабатываться позже. Тогда стандартную ::exit(0) пробовать, хотя мне кажется это некорректным. А вообще не понятно. Предположим юзер нажал на крестик, обработался слот closeEvent. В этом слоте выставляем флаг типа "все, Вась! Вылазим." Этот флаг проверяется в цикле forever(), из которого выходим по return или по break. Ну и все, фенита ля комедия. |
|
kwisp | Дата 18.5.2009, 14:06 |
SABROG, ставлю 1р на то что не получится ибо было бы несправедливо по отношению к exit(0); |
|
SABROG | Дата 18.5.2009, 13:59 |
Если так попробовать?
|
|
igor_bogomolov | Дата 18.5.2009, 13:32 |
Попробовал. Тоже самое, к сожалению. Приложение завершается при выходе из exeLoader, а не в процессе выполнения. ------------- Видимо стандартными методами Qt не получится. Придется свои флаги выставлять. |
|
kwisp | Дата 18.5.2009, 13:19 |
а void QCoreApplication::exit ( int returnCode = 0 ) не пробовал? если processEvents вызывается не каждую итерацию цикла то можно с помощью еще одной проверки было ли или нет событие закрытия выходить из цикла и соответтсвенно закрывать программу что то типа
думаю если грузишь 40с много времени одна проверка не оттяпает. хотя конечно способ кривенький, признаю. |
|
igor_bogomolov | Дата 18.5.2009, 12:59 |
в каком месте программы она вызывается, случаем не до входа в основной цикл обработки событий? нет, конечно. Цикл обработки событий в момент вызова запущен. Другие события обрабатываеются. Не обрабатывается только выход из программы. В асистенте есть замечание по этому поводу. Можно ли это обойти? вот это еще не понятно, высылается вроде бы triggered Ты все правильно понял. Это я просто так сформулировал. т.е. соединение срабатывает во время а программа закрывается только после завершения функции exeLoader К примеру, есть два коннекта. aboutQt() отробатывает в процессе выполнения exeLoader, quit() - нет.
В книге Бланшета есть такой абзац Цитата One danger with this approach is that the user might close the main window while the application is still saving, or even click File|Save a second time, resulting in undefined behavior. The easiest solution to this problem is to replace Мне же, как раз таки и надо закрыть окно во время выполнения, но этого не происходит.qApp->processEvents(); with qApp->processEvents(QEventLoop::ExcludeUserInputEvents); |
|
kwisp | Дата 18.5.2009, 12:38 |
igor_bogomolov, в каком случае вызывается exeLoader ??? в каком месте программы она вызывается, случаем не до входа в основной цикл обработки событий? высылается quit, вот это еще не понятно, высылается вроде бы triggered т.е. соединение срабатывает во время а программа закрывается только после завершения функции exeLoader так??? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 23.4.2024, 9:49 |