Russian Qt Forum
Ноябрь 27, 2024, 22:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Неблокирующее всплывающее окно  (Прочитано 11573 раз)
irus4
Гость
« : Октябрь 11, 2012, 17:29 »

Дайте совет...

Нужно отобразить окошко с кнопкой и текстом(аля... ты уверен что хочешь продолжить...). Проблема в том, что это окно отображается только, когда я вызываю блокирующую функцию exec(), а мне нужно чтобы бы после появления окна приложение дальше выполняла код в главном потоке... Можно это реализовать средствами Qt?

Заранее большое спасибо...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 11, 2012, 17:31 »

Вместо exec() используй show().
Записан

Qt 5.11/4.8.7 (X11/Win)
irus4
Гость
« Ответ #2 : Октябрь 11, 2012, 17:34 »

Так ведь если я вызову show() окно не отобразиться...

    QDialog dial;
    dial.setWindowTitle("Test");
    dial.show(); // окно не появилось, а нужно чтобы появилось

    QDialog dial2;
    dial2.setWindowTitle("Test");
    dial2.exec(); // окно появилось и все заблокировалось
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 11, 2012, 17:45 »

    dial.show(); // окно не появилось, а нужно чтобы появилось
Должно появиться.
Какая платформа, WindowManager?
Записан

Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
« Ответ #4 : Октябрь 11, 2012, 17:47 »

Так ведь если я вызову show() окно не отобразиться...

    QDialog dial;
    dial.setWindowTitle("Test");
    dial.show(); // окно не появилось, а нужно чтобы появилось

    QDialog dial2;
    dial2.setWindowTitle("Test");
    dial2.exec(); // окно появилось и все заблокировалось


dial, случаем, не уничтожается после вызова show?
Записан
irus4
Гость
« Ответ #5 : Октябрь 11, 2012, 17:50 »

Тестирую в ubuntu

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QDialog dial;
    dial.setWindowTitle("Test");
    dial.show();
  
    //тут некий код. к этому моменту диалог уже должен появиться(но не появляется). обращаю внимания что цикл обработки "exec()" я еще не вызвал, т.к. он блокирующей, а мне это не нужно

}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 11, 2012, 17:51 »

dial, случаем, не уничтожается после вызова show?
Точно, наверняка на стеке всё создано. А я тут про WM...
Записан

Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
« Ответ #7 : Октябрь 11, 2012, 17:52 »

Тестирую в ubuntu

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QDialog dial;
    dial.setWindowTitle("Test");
    dial.show();
  
    //тут некий код. к этому моменту диалог уже должен появиться(но не появляется). обращаю внимания что цикл обработки "exec()" я еще не вызвал, т.к. он блокирующей, а мне это не нужно

}

Не появится диалог к этому моменту, так как появится он только при попадании управления в exec()
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Октябрь 11, 2012, 17:53 »

2 irus4
Где на выходе
Код
C++ (Qt)
return app.exec();
Записан

Qt 5.11/4.8.7 (X11/Win)
irus4
Гость
« Ответ #9 : Октябрь 11, 2012, 17:55 »

Exec блокирует. мне нужно без него... Т.к. между app.exec() и dial.show() есть код, который долго выполняется... Мб есть какой нить метод, который показывает окно и отдает управление в главный поток?
Записан
irus4
Гость
« Ответ #10 : Октябрь 11, 2012, 17:56 »

Пытался сделать через QApplication::processEvents, но он не полностью прорисовывает окно, а только рамку(без кнопок и т.д.)
Записан
mutineer
Гость
« Ответ #11 : Октябрь 11, 2012, 17:58 »

Чтобы показать окно нужен exec(). Полюбому. Переделывай логику, перемещай свой долгий код в другое место
Записан
irus4
Гость
« Ответ #12 : Октябрь 11, 2012, 17:59 »

Да тут задача так стоит... Есть код под arm на железяку, раньше использовалась другая gui либа, решили перейти на qt малой кровью а тут такое... Если будет идея, дайте знать.. Всем еще раз спасибо!
Записан
mutineer
Гость
« Ответ #13 : Октябрь 11, 2012, 18:00 »

Да тут задача так стоит... Есть код под arm на железяку, раньше использовалась другая gui либа, решили перейти на qt малой кровью а тут такое... Если будет идея, дайте знать.. Всем еще раз спасибо!

Какая еще идея? Непонятно что тебе надо сделать же
Записан
irus4
Гость
« Ответ #14 : Октябрь 11, 2012, 18:12 »

Окай)

Нужно отображать экран не блокируя само приложение. Например, вызов show() отображает окно и выполняется код, расположенный ниже. Сейчас такое реализовать не могу, т.к. без вызова exec() ничего не появляется...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 22.