Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Янковский Александр от Ноябрь 28, 2013, 11:31



Название: Проблема прохождения событий нажатия кнопок мыши (event'ов) в виджетах
Отправлено: Янковский Александр от Ноябрь 28, 2013, 11:31
Проблема в следующем.
Приложение функционирует под управлением ОС openSUSE 12.3 в окружении KDE. ЭВМ содержит в своем составе 2 монитора.
Приложение имеет в своем багаже 2 QWidget'а. Каждый из виджетов разворачивается на своем мониторе и имеет в качестве родителя виджет, полученный посредством вызова метода QApplication::desktop()->screen( индекс_экрана ).
Суть проблемы заключается в следующем.
1) Виджеты создаются по очереди и вписаны в соответствующие экраны
2) После окончания создания виджетов и их отображения в первом созданном виджете невозможно управление мышью и клавиатурой! Во втором виджете все функционирует штатно. При этом установлено, что первому виджету не поступают события, связанные с нажатиями клавиш мыши и клавиатуры.
3) После закрытии второго виджета в первый начинают корректно поступать события, связанные с нажатиями клавиш мыши и клавиатуры.

Собственно вопрос в том, сталкивался ли кто-нибудь с подобной ситуацией в своем опыте?


Название: Re: Проблема прохождения событий нажатия кнопок мыши (event'ов) в виджетах
Отправлено: alexeev от Ноябрь 28, 2013, 12:26
Возможно события получает, только то окно которое активно, второе создатеся после первого, поэтому оно и активно, но это относится только к клавиатуре, а насчет мыши непонятно


Название: Re: Проблема прохождения событий нажатия кнопок мыши (event'ов) в виджетах
Отправлено: Янковский Александр от Ноябрь 28, 2013, 15:13
Проблема решена.

Методом дедукции обнаружил, что во время отработки слота show() второго виджета для первого приходит событие QEvent::WindowBlocked, что по сути означает блокировку другим модальным окном приложения.
Нигде в коде я модальностью окон не "игрался". НО QtDesigner за меня сам произвел логичные для него действия, а именно внутри ui-файла выставил для каждого из описаний виджетов свойство windowModality равным Qt::ApplicationModal!

Вот собственно теперь и понятна логика работы. Оба виджета модальные и второй открывшийся по сути запрещает ввод с мыши и клавиатуры для первого... естественно до момента своего уничтожения.


Название: Re: Проблема прохождения событий нажатия кнопок мыши (event'ов) в виджетах
Отправлено: Fregloin от Ноябрь 29, 2013, 11:34
первая мысль была именно такая :), сам с подобным сталкивался