Название: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: xintrea от Январь 19, 2016, 12:30 Есть у меня виджет, расширяющий QDialog.
Его надо показывать в "предварительном" виде, пока идет подготовка данных (пара секунд). А потом он наполняется данными, и запускается через exec(). Процесс отображения виджета выглядит так: Код: Downloader downloader; Проблема в том, что "предварительный" вид выглядит на экране как пустая рамка. Не видно about-надписи (QLabel). То есть, show() недостаточно. Надо как-то один раз рядом с вызовом show() обновить вид виджета, не запуская его event loop. Как это сделать? Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: Igors от Январь 19, 2016, 12:44 Код
Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: UVV от Январь 19, 2016, 13:04 Т.е. ответ про QFuture тебе не понравился и ты решил сюда прийти? =)
Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: __Heaven__ от Январь 19, 2016, 13:51 Как вариант, можно добавить пустой (либо динамический) прогресс диалог на время парсинга
Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: kambala от Январь 19, 2016, 14:37 почему нельзя парсинг в отдельный поток засунуть? после окончания обновить диалог с данными.
Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: xintrea от Январь 19, 2016, 16:52 почему нельзя парсинг в отдельный поток засунуть? после окончания обновить диалог с данными. Для того чтобы один раз отобразить окно, городить параллельный поток - это черезчур. Я уже сделал просто другое немодальное окно QMessageBox, показываю его пока идет парсинг. Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: xintrea от Январь 19, 2016, 16:55 Т.е. ответ про QFuture тебе не понравился и ты решил сюда прийти? =) На лоре обычно неадекватные ответы. Я пишу параллельно на несколько форумов, цинично используя коллективный разум. Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: Bepec от Январь 19, 2016, 17:19 xintrea у вас что то в классе не то видимо.
Обычный QDialog в связке с processEvents работает нормально, окно отрисовывается нормально. Мб у вас в классе происходит отложенная инициализация лейбла? Код: dial = new Dialog; Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: xintrea от Январь 20, 2016, 08:32 xintrea у вас что то в классе не то видимо. Обычный QDialog в связке с processEvents работает нормально, окно отрисовывается нормально. Нормально все отрисовывается, я не спорю. Создал окно QDialog, вызвал qApp->processEvents(), окно на экране нарисовано полностью. Проблема дальше возникла другого характера. Есть главное окно программы, поверх него появляется модальное окно добавления записи, и поверх него уже обсуждаемый QDialog. Так вот если с окна добавления записи переключиться на другую программу, а потом вернуться и вызвать QDialog, то этот QDialog появится под окном добавления записи. Немотря на то, что у него родитель - окно добавления записи. Не помогает ни raise(), ни activateWindow() - все равно открывается на заднем плане. Поэтому я забил на эту "предварительную инициализацию окна", и вместо него просто показываю обычный стандартный QDialog. Он тоже поначалу прятался, но помогло принудительное raise(). Причем такое поведение наблюдаю только в Windows, а в Linux все нормально. Название: Re: Oтобразить QDialog в длительном процессе до того как будут запущен его eventloop Отправлено: Bepec от Январь 20, 2016, 10:39 Это уже интереснее. Захочется обсудить создавайте проектик тестовый и поразбираемся. А раз проблема решена то и темку можно закрыть :D
|