Название: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 24, 2010, 17:31 Привет.
Мне нужно показать диалог сразу после qApp->exec(), в котором будет возможность просто выйти из приложения. Где правильнее разместить этот диалог? Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: Sancho_s_rancho от Сентябрь 24, 2010, 18:11 Так в main.cpp вместо QMainWindow вставь класс диалога. Скажи ему show и делай qApp->exec()
Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 24, 2010, 18:19 Так в main.cpp вместо QMainWindow вставь класс диалога. Скажи ему show и делай qApp->exec() Не пойдёт. 1. MainWindow тоже отображается 2. Хотел разместить его в main.cpp, но у MainWindow должна быть возможность закрыть диалог. Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: EhTemka от Сентябрь 24, 2010, 18:38 Возможность закрыть диалог должна быть у пользователя, имхо ;)
размести этот диалог в MainWindow. И по какому нибудь событию (например closeEvent, или нажатие кнопки(пункта меню) Exit), вызывай у диалога exec() и проверяй результат. Можно воспользоваться стандартным диалогом вопроса StandardButton QMessageBox::question(...) Сорри не внимательно читал. в твоем случаи можно вызвать диалог в MainWindow::showEvent(...) Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 24, 2010, 18:47 Сорри не внимательно читал. в твоем случаи можно вызвать диалог в MainWindow::showEvent(...) Насчёт showEvent() тоже думал.. Тогда получается нужно проверять, первый ли это showEvent() или нет. Это нормальная практика или есть другие решения? Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: EhTemka от Сентябрь 24, 2010, 18:52 можно создавать диалог в конструкторе, а после вызова его удалять и обнулять указатель...
Но чтобы было понятней что надо, поясни этот момент Цитировать но у MainWindow должна быть возможность закрыть диалог Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 24, 2010, 18:59 можно создавать диалог в конструкторе, а после вызова его удалять и обнулять указатель... Но чтобы было понятней что надо, поясни этот момент Цитировать но у MainWindow должна быть возможность закрыть диалог Закрыть по сигналу. Пробую сейчас вариант с showEvent()... Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 24, 2010, 19:11 можно создавать диалог в конструкторе, а после вызова его удалять и обнулять указатель... Таки вариант с конструктором помог, спасибо =) Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: Denjs от Сентябрь 24, 2010, 21:50 Я обычно делаю специальный класс signal_sender - у которого есть собственный спец-сигнал, который испускаю при вызове спец-определенного метода. Данный сигнал я перед этим подключаю внутри main() типом соединения Qt::QueuedConnection к классу, который проводит "инициацию приложения и вообще".
Т.к. до того как вы сделаете qApp->exec() цикла событий у нас нет - то и сигнал через Qt::QueuedConnection нифига не будет доставлен. Но как только мы запускаем qApp - сигнал доставляется и все ок. Это решение имхо лучше, чем завязываться на графические окошки, потому что у меня напримре может и не быть графических окон в приложении. я никого не запутал? ))))))))))) Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: GraninAS от Сентябрь 28, 2010, 10:17 Привет. Мне нужно показать диалог сразу после qApp->exec(), в котором будет возможность просто выйти из приложения. Где правильнее разместить этот диалог? А какова задача? Может быть, все проще, чем кажется. Например, в одном моем приложении при запуске программы пользователю показывается диалог подключения к БД, и ничего больше. Если пользователь нажал на "Отмену", тут программа и закрывалась. Если же логинился, ему открывалось главное окно. Оттуда можно еще раз вызвать тот же диалог подключения, чтобы переподключиться. Не составляет труда для диалога создать кнопку, которая бы закрывала программу, и проверять в главном окне, что нажата именно она. Ситуация похожа? Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: SASA от Сентябрь 28, 2010, 16:12 А какова задача? Может быть, все проще, чем кажется. Вот мне тоже так кажется ;) Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 29, 2010, 08:45 А какова задача? Может быть, все проще, чем кажется. Например, в одном моем приложении при запуске программы пользователю показывается диалог подключения к БД, и ничего больше. Если пользователь нажал на "Отмену", тут программа и закрывалась. Если же логинился, ему открывалось главное окно. Оттуда можно еще раз вызвать тот же диалог подключения, чтобы переподключиться. Не составляет труда для диалога создать кнопку, которая бы закрывала программу, и проверять в главном окне, что нажата именно она. Ситуация похожа? Что-то типа того... Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: GraninAS от Сентябрь 29, 2010, 08:55 Что-то типа того... Ну тогда вот примерная схема. Код: // main.cpp Надеюсь, догадаетесь, что должно быть прописано и продизайнено в вашем диалоге? Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: whirlwind от Сентябрь 29, 2010, 15:55 Denjs правильно написал.
Т.е. вам нужен класс со слотом, который будет запускать ваше приложение (делать show() нужному виджету)ю И еще таймер, singleshot с нулевой задержкой. Работать оно должно так: - создали запускающий обьект запускающего класса - создали таймер - соединили запускающий обьект с таймером - запустили таймер - app->exec() Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: UVV от Сентябрь 29, 2010, 16:29 Denjs правильно написал. Т.е. вам нужен класс со слотом, который будет запускать ваше приложение (делать show() нужному виджету)ю И еще таймер, singleshot с нулевой задержкой. Работать оно должно так: - создали запускающий обьект запускающего класса - создали таймер - соединили запускающий обьект с таймером - запустили таймер - app->exec() OK, спасибо. Буду работать. Название: Re: Куда поместить код, чтобы он выполнился сразу после qApp->exec() Отправлено: panAlexey от Сентябрь 29, 2010, 21:43 Привет. Мне нужно показать диалог сразу после qApp->exec(), в котором будет возможность просто выйти из приложения. Где правильнее разместить этот диалог? Код: int main(int argc, char *argv[]) |