Russian Qt Forum
Ноябрь 01, 2024, 20:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Интерактивное окно и QMesssageBox. Как?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Интерактивное окно и QMesssageBox. Как? (Прочитано 5198 раз)
hordi1
Гость
Интерактивное окно и QMesssageBox. Как?
«
:
Декабрь 20, 2010, 11:51 »
Есть необходимость показывать одно окно (для отображения лога) при любой ситуации в аппликухе, т.е. даже если показывается QMessageBox. Это окно должно взаимодействовать с мышью-клавишами (например, после того как в него тыкнули курсором)...
Попробовал установить флаги setWindowFlags(Qt::Window|Qt::WindowStaysOnTopHint) и setWindowModality(Qt::ApplicationModal) - работает если окно показывается после отображения QMessageBox, но если оно было отображено до показа QMessageBox - получить ввод на него уже нельзя.
Qt-4.7.1
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #1 :
Декабрь 20, 2010, 12:08 »
Не устанавливай ему родителя.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hordi1
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #2 :
Декабрь 20, 2010, 12:15 »
Я не устанавливаю - это не имеет значения.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #3 :
Декабрь 20, 2010, 12:58 »
По идее, окно без родителя является самостоятельным и никакие QMessageBox не должны на него влиять. Попробуй сделать setParent (0).
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hordi1
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #4 :
Декабрь 20, 2010, 13:42 »
Да почему это? Диалог есть диалог, он блокирует аппликуху.
В общем решил проблему...
Устанавливаем окну флаги:
setWindowFlags(Qt::Window|Qt::WindowStaysOnTopHint);
setWindowModality(Qt::WindowModal);
Затем в QApplication::notify отлавливаем QEvent::Show для всех диалогов и с помощью postEvent делаем hide() и show() для лог-окна (это для того чтобы избавится от модальности текущего QDialog).
Записан
andrew.k
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #5 :
Декабрь 20, 2010, 18:08 »
Цитата: hordi1 от Декабрь 20, 2010, 13:42
Да почему это? Диалог есть диалог, он блокирует аппликуху.
В общем решил проблему...
Устанавливаем окну флаги:
setWindowFlags(Qt::Window|Qt::WindowStaysOnTopHint);
setWindowModality(Qt::WindowModal);
Затем в QApplication::notify отлавливаем QEvent::Show для всех диалогов и с помощью postEvent делаем hide() и show() для лог-окна (это для того чтобы избавится от модальности текущего QDialog).
Так зачем вообще делать его модальным, чтобы потом отлавливать и избавляться от модальности? не понимаю.
Покажи его show() и все. Что тебе еще от него нужно?
Записан
hordi1
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #6 :
Декабрь 20, 2010, 20:35 »
Показываем окно (пусть через show()), вызываем QMessageBox::warning - все, до момента закрытия мессаджбокса с тем окном ВЗАИМОДЕЙСТВОВАТЬ нельзя.
Записан
andrew.k
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #7 :
Декабрь 20, 2010, 21:45 »
Понятно
Ну так мессаджбокс на то и мессаджбокс, чтобы пользователь на него сразу отреагировал, на то он и модальный, а если его можно проигнорировать, так зачем он нужен?
Записан
hordi1
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #8 :
Декабрь 21, 2010, 20:22 »
Ну почему же... Лог-окно в данном случае отвязано от логики работы программы и не должно мешать выполнению программы.
Записан
andrew.k
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #9 :
Декабрь 22, 2010, 12:03 »
Это не противоречит тому, что я сказал.
Я все равно сначала отвечу на вопрос программы, а потом полезу смотреть лог, если мне это будет нужно.
Думаю ты сделаешь точно так же, в этой ситуации.
А твой подход заставляет тебя идти на извращения, ради непонятной эфемерной "отвязности лога от логики программы".
Либо запусти лог отдельным процессом и не мучайся.
Записан
hordi1
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #10 :
Декабрь 22, 2010, 17:07 »
Дело в том, часто программа не позволяет ничего делать пока не выполнятся базовые действия. У меня ищутся определенные данные на флешках перед запуском программы, т.е. показывается модальное окно с индикацией ожидания, в это время монтируются флешки и ищутся данные, замтем если не найдено - показывается мессага с сообщением закрыть программу или повторить. Вот этот случай и не позволяет так просто использовать лог-окно.
Отдельным процессом думал, но получается еше геморнее - это надо межпроцессное взаимодействие включать и массу других фишек учитывать (например у меня меня аппликуха работает в полноэкранном режиме).
Моя реализация позволила прикрутить окно с логом абсолютно к любой моей программе без всякой модификации, т.е. все работает на уровне базового класса, определенного от QAppliction.
Записан
andrew.k
Гость
Re: Интерактивное окно и QMesssageBox. Как?
«
Ответ #11 :
Декабрь 22, 2010, 18:12 »
Кинь скриншот как это выглядит, а то я не очень понял.
Например, можно написать в окне лога соответствующее сообщение: "ничего не найдено, либо выходите либо ищите снова".
А как выходить и искать пользователь в курсе.
Если тебе вообще интересно это обсуждать.
Межпроцессное взаимодействие например через сокеты сделать один час нужно, имхо, если тупо и по-простому.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...