Russian Qt Forum
Ноябрь 27, 2024, 22:52
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Неблокирующее всплывающее окно
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Неблокирующее всплывающее окно (Прочитано 11573 раз)
irus4
Гость
Неблокирующее всплывающее окно
«
:
Октябрь 11, 2012, 17:29 »
Дайте совет...
Нужно отобразить окошко с кнопкой и текстом(аля... ты уверен что хочешь продолжить...). Проблема в том, что это окно отображается только, когда я вызываю блокирующую функцию exec(), а мне нужно чтобы бы после появления окна приложение дальше выполняла код в главном потоке... Можно это реализовать средствами Qt?
Заранее большое спасибо...
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Неблокирующее всплывающее окно
«
Ответ #1 :
Октябрь 11, 2012, 17:31 »
Вместо exec() используй show().
Записан
Qt 5.11/4.8.7 (X11/Win)
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #2 :
Октябрь 11, 2012, 17:34 »
Так ведь если я вызову show() окно не отобразиться...
QDialog dial;
dial.setWindowTitle("Test");
dial.show(); // окно не появилось, а нужно чтобы появилось
QDialog dial2;
dial2.setWindowTitle("Test");
dial2.exec(); // окно появилось и все заблокировалось
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Неблокирующее всплывающее окно
«
Ответ #3 :
Октябрь 11, 2012, 17:45 »
Цитата: irus4 от Октябрь 11, 2012, 17:34
dial.show(); // окно не появилось, а нужно чтобы появилось
Должно появиться.
Какая платформа, WindowManager?
Записан
Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #4 :
Октябрь 11, 2012, 17:47 »
Цитата: irus4 от Октябрь 11, 2012, 17:34
Так ведь если я вызову show() окно не отобразиться...
QDialog dial;
dial.setWindowTitle("Test");
dial.show(); // окно не появилось, а нужно чтобы появилось
QDialog dial2;
dial2.setWindowTitle("Test");
dial2.exec(); // окно появилось и все заблокировалось
dial, случаем, не уничтожается после вызова show?
Записан
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #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
Сообщений: 2921
Re: Неблокирующее всплывающее окно
«
Ответ #6 :
Октябрь 11, 2012, 17:51 »
Цитата: mutineer от Октябрь 11, 2012, 17:47
dial, случаем, не уничтожается после вызова show?
Точно, наверняка на стеке всё создано. А я тут про WM...
Записан
Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #7 :
Октябрь 11, 2012, 17:52 »
Цитата: irus4 от Октябрь 11, 2012, 17:50
Тестирую в ubuntu
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QDialog dial;
dial.setWindowTitle("Test");
dial.show();
//тут некий код. к этому моменту диалог уже должен появиться(но не появляется). обращаю внимания что цикл обработки "exec()" я еще не вызвал, т.к. он блокирующей, а мне это не нужно
}
Не появится диалог к этому моменту, так как появится он только при попадании управления в exec()
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Неблокирующее всплывающее окно
«
Ответ #8 :
Октябрь 11, 2012, 17:53 »
2
irus4
Где на выходе
Код
C++ (Qt)
return
app.
exec
(
)
;
Записан
Qt 5.11/4.8.7 (X11/Win)
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #9 :
Октябрь 11, 2012, 17:55 »
Exec блокирует. мне нужно без него... Т.к. между app.exec() и dial.show() есть код, который долго выполняется... Мб есть какой нить метод, который показывает окно и отдает управление в главный поток?
Записан
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #10 :
Октябрь 11, 2012, 17:56 »
Пытался сделать через QApplication::processEvents, но он не полностью прорисовывает окно, а только рамку(без кнопок и т.д.)
Записан
mutineer
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #11 :
Октябрь 11, 2012, 17:58 »
Чтобы показать окно нужен exec(). Полюбому. Переделывай логику, перемещай свой долгий код в другое место
Записан
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #12 :
Октябрь 11, 2012, 17:59 »
Да тут задача так стоит... Есть код под arm на железяку, раньше использовалась другая gui либа, решили перейти на qt малой кровью а тут такое... Если будет идея, дайте знать.. Всем еще раз спасибо!
Записан
mutineer
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #13 :
Октябрь 11, 2012, 18:00 »
Цитата: irus4 от Октябрь 11, 2012, 17:59
Да тут задача так стоит... Есть код под arm на железяку, раньше использовалась другая gui либа, решили перейти на qt малой кровью а тут такое... Если будет идея, дайте знать.. Всем еще раз спасибо!
Какая еще идея? Непонятно что тебе надо сделать же
Записан
irus4
Гость
Re: Неблокирующее всплывающее окно
«
Ответ #14 :
Октябрь 11, 2012, 18:12 »
Окай)
Нужно отображать экран не блокируя само приложение. Например, вызов show() отображает окно и выполняется код, расположенный ниже. Сейчас такое реализовать не могу, т.к. без вызова exec() ничего не появляется...
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...