![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
LE0N |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
В общем написал малюсенькую аппликуху. В которой имеется форма-матюкалка фатальных ошибок апликухи.
Которую показываю так
Хотелось бы, что бы после того, как отработает окно диалога (dlg->exec()) - т.е. закроется. Закрывалось всё приложение. QApplication::quit() вообще ни чего не делает. (По крайней мере этого не видно) QApplication::exit(-1) тоже.
Просто закрывает все окна. А процесс так и остаётся висеть..... В общем написал малюсенькую программку. В которой имеется форма-матюкалка фатальных ошибок апликухи. Которую показываю так
Хотелось бы, что бы после того, как отработает окно диалога (dlg->exec()) - т.е. закроется. Закрывалось всё приложение. QApplication::quit() вообще ни чего не делает. (По крайней мере этого не видно) QApplication::exit(-1) тоже.
Просто закрывает все окна. А процесс так и остаётся висеть..... ВЦ. Где кнопка редактировать? |
|
|
![]() |
panter_dsd |
![]()
Сообщение
#2
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Приведи побольше кода.
Цитата ВЦ. Где кнопка редактировать? После 20 постов появится. Сообщение отредактировал panter_dsd - 12.3.2009, 21:06 |
|
|
LE0N |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
main
Раскрывающийся текст
Loader::process() Раскрывающийся текст
FatalMsg::display Раскрывающийся текст
|
|
|
panter_dsd |
![]()
Сообщение
#4
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Так w остается висеть...
Попробуй
|
|
|
LE0N |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Так в том то и дело, я хочу что бы СРАЗУ после FatalMsg::display, закрывалось всё приложение!
Может исключение какое выбрсить можно, аль ещё чего? QApplication::closeAllWindows(); Как я уже и говорил, закрывает все окна, только в не зависимости от настройки setQuitOnLastWindowClosed(true), процесс остаётся висеть.... |
|
|
BRE |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Так в том то и дело, я хочу что бы СРАЗУ после FatalMsg::display, закрывалось всё приложение! Может исключение какое выбрсить можно, аль ещё чего? QApplication::closeAllWindows(); Как я уже и говорил, закрывает все окна, только в не зависимости от настройки setQuitOnLastWindowClosed(true), процесс остаётся висеть.... Ты запускаешь process, еще до запуска цикла обработки событий (который запускается a.exec()), поэтому quit() и не отрабатывает, ему еще останавливать нечего. Есть жОсткий метод: добавь ::exit( 0 ) в функцию display (после qApp->quit() или вместо). А по хорошему, вызывай display после запуска цикла событий. Сообщение отредактировал BRE - 12.3.2009, 21:38 |
|
|
LE0N |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Не помогло.
А как начать обработку ПОСЛЕ a.exec ? К какому слоту прицепиться? |
|
|
BRE |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Не помогло. А у меня работает ![]()
А как начать обработку ПОСЛЕ a.exec ? К какому слоту прицепиться? Я не знаю что ты хочешь сделать? Если вся работа происходит в process, замени в main: return a.exec(); на return 0; Или можно запускать process нажатием кнопки или по таймеру наконец. Много есть разных вариантов. ![]() |
|
|
LE0N |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне не нужно через задницу. Мне нужен толковый способ по запуску loader->process после a.exec без участия пользователя...
|
|
|
BRE |
![]()
Сообщение
#10
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Мне не нужно через задницу. Мне нужен толковый способ по запуску loader->process после a.exec без участия пользователя... Если вся работа выполняется в process() и после его завершения программа должна закрыться (я так понимаю твою задачу):
Сообщение отредактировал BRE - 12.3.2009, 22:14 |
|
|
LE0N |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Нет. Работы после МНОГО. В том числе и работа с формами.
Блин. До таких вот решений я и сам додуматься могу. |
|
|
BRE |
![]()
Сообщение
#12
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
LE0N |
![]()
Сообщение
#13
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата return; } // Дальнейшая работа После лоадинга, у меня появляются формы. АЛГОРИТМ НЕ ЛИНЕЙНЫЙ! Давайте перейдём от первоначального вопроса к Цитата запустить loader->process после a.exec без участия пользователя...
|
|
|
BRE |
![]()
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Давайте перейдём от первоначального вопроса к Цитата запустить loader->process после a.exec без участия пользователя... В конструкторе Loader:
Таймер сработает сразу после запуска цикла обработки событий. process() - должен быть слотом. Да, из main вызов process убрать. Сообщение отредактировал BRE - 12.3.2009, 22:36 |
|
|
SABROG |
![]()
Сообщение
#15
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Я вот чего понять не могу. Если класс с проверкой настроек спецом вынесен отдельно от класса главного окна, чтобы ускорить загрузку программы и программа не делала лишних телодвижений по инициализации элементов управления, перевода текста и т.д. То нафига eventloop (.exec()) ? Тут либо возвращать true/false из метода и делать return из main'a, если далеко возвращаться, то exit(). Как так он может не работать?
Иначе использовать трюк как в example torrent, в конструкторе окна поместить в очередь эвентов вызов своего метода. Он вызовется ровно тогда, когда будет вызван exec():
Даже сам Designer не гнушается:
P.S.: плохо то, что если сделать show окну, то оно появляется на мгновение, а потом идет выход из программы. Сообщение отредактировал SABROG - 13.3.2009, 0:00 |
|
|
LE0N |
![]()
Сообщение
#16
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я вот чего понять не могу. Если класс с проверкой настроек спецом вынесен отдельно от класса главного окна, чтобы ускорить загрузку программы и программа не делала лишних телодвижений по инициализации элементов управления, перевода текста и т.д. То нафига eventloop (.exec()) ? Тут либо возвращать true/false из метода и делать return из main'a, если далеко возвращаться, то exit(). Как так он может не работать? У меня класс настроек системы не вынесен ЗА программу. Вообще, по задуме, у меня имеется окно Loader в котором есть прогресс бар и прочая байда. Работаю с удалённой базой данных Mysql. Сначала получаю настройки, потом пользователей. И прочую нужную мне в работе байду. Лоадер всё это отображает и весь процесс виден в этом самом окне. Когда загружаю всё, что мне нужно - показываю главное окно... Вот и вся система... А на данный момент делал окно, которое при вызове статического метода, показывает окошко с ошибкой. После закрытия которого - закрывается вся программа. Спасибо BRE, показал способ, как это сделать. Теперь QApplication::exit работает... Блин...Дайте мне возможность редактировать ![]() Вот сейчас после пива пришёл, и вместо quote, code написал сгоряча)) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Блин...Дайте мне возможность редактировать по набору 20 сообщений автоматом появитсяВот сейчас после пива пришёл, и вместо quote, code написал сгоряча)) А для цитирования есть отдельная кнопка, см. справку, тогда и в рукопашную набирать ненадо |
|
|
LE0N |
![]()
Сообщение
#18
|
Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да я знаю, что есть. Иногда мне проще вручную набрать
![]() |
|
|
AlexRass |
![]()
Сообщение
#19
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 13.3.2009 Пользователь №: 613 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добавь свой сигнал и эмитируй где тебе надо. Соедини его со слотом close(). Должно работать.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 21.6.2025, 11:44 |