Вопрос

Я действительно не знаю, как сформулировать свой вопрос на этот раз ...

У меня есть приложение с QDialog в качестве главного окна. Приложение получает различные значения, такие как температура, влажность и т. Д., С удаленного компьютера.

Для разработки я добавил групповое поле с различными виджетами для имитации этих значений. У меня разные ограничения на выдачу пользователю предупреждений и сигналов тревоги.

Например, если температура поднимается выше 30 ° C, я открываю QMessageBox с указанием времени запроса (приложение выполняет опрос на удаленном компьютере) и текущей температуры. Таким образом, он обновляется каждый цикл запроса.

Я использую метод show () для вывода окна сообщения, которое поддерживает работу моего приложения в фоновом режиме. Проблема теперь в следующем: фокус находится в окне сообщения, и ничего в моем главном окне / QDialog нельзя щелкнуть, пока окно сообщения не будет принято / не будет завершено.

И в этом моя проблема: в режиме моделирования я хочу поиграть с разными значениями температуры, которые я могу регулировать с помощью ползунка в главном окне. Как мне получить доступ к этим виджетам / сделать так, чтобы окно сообщения «не блокировало»?

С уважением,

Матиас

Это было полезно?

Решение

То, что вы испытываете, называется «модальностью» окна.По умолчанию общий кодовый код является «модальным приложением».Это означает, что ввод во все другие окна приложений заблокирован.

Чтобы изменить модальность, используйте setWindowModality () со значениемиз Qt :: WindowModality непосредственно перед вызовом QMessageBox.В вашем случае:

родовое слово

Другие советы

Действительно, у вас есть модальное окно сообщения, которое и предназначено для работы QMessageBox - т.е. пользователь должен быть предупрежден, а пользовательский интерфейс защищен от дальнейшего взаимодействия, пока пользователь не зарегистрирует сообщение, не закроет окно сообщения и (если необходимо) предпринял все необходимые действия в ответ на сообщение.

Теперь, если вы установите модальность окна сообщения на Qt :: NonModal (не забудьте назначить его переменной, которая не выйдет за пределы области действия, когда ваше приложение продолжит работу после появления окна сообщения), вы сможете взаимодействовать с пользовательским интерфейсом, даже когда отображается окно сообщения, что, я должен сказать, «необычно». Если я понимаю ваше требование, у вас уже будет окно сообщения - тогда, пока оно все еще работает, вы захотите поиграть с разными значениями температуры в главном окне - с какой целью? Пока не появится другое диалоговое окно сообщения? В какой-то момент окно сообщения придется выбросить.

Более того, если вы показываете немодальное окно сообщения, а затем взаимодействуете с главным окном, вы, скорее всего, просто потеряете окно сообщения за главным окном, в любом случае вне поля зрения.

Я бы предложил, чтобы окна сообщений обычно обрабатывались так, как задумано - только временные, временные модальные окна предупреждений, и что, возможно, вам потребуется четко видимая область оперативного отчета / состояния в главном окне, а не использование немодального QMessageBox.

Надеюсь, это поможет

С уважением

Роджер

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top