2011-01-17 3 views
0

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

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

Как я могу это достичь?

ответ

0

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

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

+0

Это, конечно, не полный ответ, так как ни один из стандартных элементов управления, таких как AbstractButon, не работает по назначению. Поскольку они не инициировали mouseDown, они не будут нажимать кнопки. –

Смежные вопросы