Название: [РЕШЕНО] Выход из приложения Отправлено: Urvin от Август 24, 2009, 10:57 В конструкторе главной формы имею следующее:
Код
Никак не могу завершить программу после выскакивания сообщения об ошибке.. Команды close(), this->close(), qApp->quit() не возымеют никакого влияния - все также появляется окно программы. Где я неправ и как все же завершить работу программы? ??? Название: Re: Выход из приложения Отправлено: BRE от Август 24, 2009, 11:02 Никак не могу завершить программу после выскакивания сообщения об ошибке.. Команды close(), this->close(), qApp->quit() не возымеют никакого влияния - все также появляется окно программы. Когда отрабатывает конструктор MainWindow цикл обработки событий еще не запущен и окно еще не открыто. Поэтому ни close ни quit, эффекта не дают.Где я неправ и как все же завершить работу программы? ??? Может проще пытаться открывать порт в функции main и если открытие невозможно, то выходить из программы не создавая главного окна. Название: Re: Выход из приложения Отправлено: Urvin от Август 24, 2009, 11:12 блин.. косяк...
Может, в этом блоке выставлять некую переменную bool closeMePlease в true и закрывать откуда-то еще, но при старте программы? Появится при этом главное окно, не появится - не важно Название: Re: Выход из приложения Отправлено: BRE от Август 24, 2009, 11:15 Может, в этом блоке выставлять некую переменную bool closeMePlease в true и закрывать откуда-то еще, но при старте программы? Да можно и так, еще можно исключение вызвать.Появится при этом главное окно, не появится - не важно Только для чего лишние телодвижения? ;) Название: Re: Выход из приложения Отправлено: Urvin от Август 24, 2009, 11:19 сейчас голова работает откровенно плохо и что-то мне подсказывает, что перенести эту муть в main получится оооооой как не сразу =)
куды бы вставить проверку флага на закрытие? Название: Re: Выход из приложения Отправлено: BRE от Август 24, 2009, 11:22 сейчас голова работает откровенно плохо и что-то мне подсказывает, что перенести эту муть в main получится оооооой как не сразу =) В main, сразу за строкой создания MainWindow.куды бы вставить проверку флага на закрытие? Название: Re: Выход из приложения Отправлено: Urvin от Август 24, 2009, 11:33 То, что надо! Безмерное и безграничное спасибо!
(http://i019.radikal.ru/0710/57/a80f96f82cd3x.jpg) Название: Re: [РЕШЕНО] Выход из приложения Отправлено: ритт от Август 24, 2009, 11:37 что за сорт хоть?)
Название: Re: [РЕШЕНО] Выход из приложения Отправлено: Urvin от Август 24, 2009, 11:49 Hefeweizen
Название: Re: [РЕШЕНО] Выход из приложения Отправлено: Alex Custov от Август 24, 2009, 15:12 Код: exit(0); Название: Re: Выход из приложения Отправлено: sergeyvl12 от Август 24, 2009, 20:45 сейчас голова работает откровенно плохо и что-то мне подсказывает, что перенести эту муть в main получится оооооой как не сразу =) куды бы вставить проверку флага на закрытие? Флаг на закрытие? Некрасиво же! :) Исключение будет правильнее имхо. Название: Re: [РЕШЕНО] Выход из приложения Отправлено: spectre71 от Август 24, 2009, 21:02 В конструкторе главной формы имею следующее: ... ... Никак не могу завершить программу после выскакивания сообщения об ошибке.. Команды close(), this->close(), qApp->quit() не возымеют никакого влияния - все также появляется окно программы. Где я неправ и как все же завершить работу программы? ??? exit(X), где: int X != 0; поскольку 0 - нормальное завершение! Соответственно, конкретное заначение X != 0 - тип ошибки в твоем приложении, если лениво классифицировать ошибки делай exit(1) Название: Re: [РЕШЕНО] Выход из приложения Отправлено: ритт от Август 25, 2009, 09:45 да какая разница? - exit в конструкторе класса - ну, некошерно ведь...
на мой взгляд, такой подход применим только для тела main() или в ситуации, когда аллокатору не удалось выделить память и нужно в панике сбежать... из всех моих проектов на кутэ только в одном используется exit(X) - в дебаге при выбросе qCriticalType сообщения... Название: Re: [РЕШЕНО] Выход из приложения Отправлено: sergeyvl12 от Август 25, 2009, 10:07 да какая разница? - exit в конструкторе класса - ну, некошерно ведь... на мой взгляд, такой подход применим только для тела main() или в ситуации, когда аллокатору не удалось выделить память и нужно в панике сбежать... из всех моих проектов на кутэ только в одном используется exit(X) - в дебаге при выбросе qCriticalType сообщения... Абсолютно согласен. Для лабораторки это приемлемо. Но для большого серьезного приложения это недопустимо. С флагом тоже некрасиво. лучше всего так: Код: int main() Заодно в этом же месте перехватим и ошибки выделения памяти и длугие ошибки. Теперь из конструктора нужно вызвать throw(MyException("text")); и все... P.S. Вместо exit() в main() можно использовать return. Название: Re: [РЕШЕНО] Выход из приложения Отправлено: BRE от Август 25, 2009, 10:27 Абсолютно согласен. Для лабораторки это приемлемо. Но для большого серьезного приложения это недопустимо. С флагом тоже некрасиво. А тебя только момент с флагом насторожил (для большого серьезного проекта)? ;)А то что весь функционал работы с устройством находиться в классе MainWindow - это как? ::) Название: Re: [РЕШЕНО] Выход из приложения Отправлено: SASA от Август 25, 2009, 11:54 Я бы сделал конструктор отдельно, инициализация данных отдельно. Причём функция инициализации возвращает код. По этому коду либо идём дальше, либо ругаемся и выходим. Есть ещё плюс такого подхода. Иницализацию можно упечь в отдельный поток.
Цитировать Да можно и так, еще можно исключение вызвать. Троли не рекомендуют использовать исключения. http://qt.gitorious.org/qt/pages/CodingConventions (http://qt.gitorious.org/qt/pages/CodingConventions) Название: Re: [РЕШЕНО] Выход из приложения Отправлено: sergeyvl12 от Август 25, 2009, 12:43 Абсолютно согласен. Для лабораторки это приемлемо. Но для большого серьезного приложения это недопустимо. С флагом тоже некрасиво. А тебя только момент с флагом насторожил (для большого серьезного проекта)? ;)А то что весь функционал работы с устройством находиться в классе MainWindow - это как? ::) Вы правы. Но все потому, что я пытался отвечать В ТЕМУ. А тема у нас - ВЫХОД ИЗ ПРИЛОЖЕНИЯ. Давайте и следовать этой теме :) Название: Re: [РЕШЕНО] Выход из приложения Отправлено: sergeyvl12 от Август 25, 2009, 12:49 Цитировать Троли не рекомендуют использовать исключения. http://qt.gitorious.org/qt/pages/CodingConventions (http://qt.gitorious.org/qt/pages/CodingConventions) Спасибо, SASA, не знал что у них есть такая рекомендация. Это очень странно, потому что исключения - краеугольный камень плюсов (также есть во многих современных языках ). Думаю все же исключения использовать можно и нужно, но только очень грамотно и осторожно. Но совсем отказываться... Я лучше от QT откажусь :) Даже в wxWidgets их уже разрешили использовать [дописал позже] Я кажется понял. Это рекомендация к разработке САМОЙ БИБЛИОТЕКИ и ее компанентов, а не приложений которые ее используют. Ну как разрабатывать библиотеку (с исключениями или без, с ртти или без ) - это их дело :) Меня же волнует чтобы я сам мог использовать исключения в моей программе. Название: Re: [РЕШЕНО] Выход из приложения Отправлено: BRE от Август 25, 2009, 13:01 Вы правы. Но все потому, что я пытался отвечать В ТЕМУ. А тема у нас - ВЫХОД ИЗ ПРИЛОЖЕНИЯ. Давайте и следовать этой теме :) Так если бы было спроектировано по другому, исключения вообще бы не понадобились, о чем я сразу и написал. В main попробовали открыть устройство, не получилось - написали сообщение и вышли, получилось - создали главное окно и запустились.;) |