Qt popup grabMouse для всех детей - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь создать всплывающее меню, например элемент управления, который содержит пользовательские виджеты.Мне нужно захватить мышь, но мне нужно, чтобы дети в виджете по-прежнему получали сообщения мыши.Похоже, что grabMouse отправляет события только виджету, который захватил мышь, а не его дочерним элементам.

Всплывающее окно представляет собой просто последовательность кнопок (с использованием QGridLayout).Элемент управления должен работать так, что пользователь нажимает правую кнопку мыши, появляется всплывающее окно, они перемещаются к элементу и отпускают кнопку мыши.Оптимально это будет работать точно так же, как всплывающее окно QMenu, но с пользовательскими виджетами и пользовательским макетом.

Как мне этого добиться?

1 Ответ

0 голосов
/ 17 января 2011

Похоже, что простого указания атрибута Qt::Popup достаточно для получения необходимого основного поведения.

Установка фильтра событий на всех дочерних элементах также необходима. Все события мыши, события ввода / выхода / наведения должны быть зафиксированы. QT имеет дефект в grabMouse, поэтому он не будет работать - для получения ожидаемого поведения необходимо использовать фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...