Qt - Поймать события, обычно обрабатываемые диспетчером окон - PullRequest
1 голос
/ 14 июня 2011

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

В настоящее время я создаю приложение CAD,пользователь взаимодействует в трехмерных видовых экранах в основном с помощью мыши и трех клавиатурных модификаторов (alt, shift, ctrl).Shift и управление изменяют выбранные в данный момент параметры инструмента, и alt управляет камерой - так же, как любое другое приложение 3D CAD.

Однако в настоящее время я работаю с рабочим столом Gnome, и его оконный менеджер (AFAIK) ловит любыеAlt-RightButton перетаскивает события мыши и интерпретирует их как команду перетаскивания окна - даже если не удерживать строку заголовка и независимо от выделенного в данный момент виджета.

Для меня это катастрофа, потому что управление клавиатурой камеры довольно стандартизировано вмоя целевая индустрия.Так кто-нибудь знает способ переопределить это поведение, предпочтительно изнутри Qt, и предпочтительно сфокусировать его для моего единственного сценария в одном конкретном классе виджетов?

Спасибо,
Cam

1 Ответ

1 голос
/ 14 июня 2011

Если вы используете Qt :: X11BypassWindowManagerHint для окна, то оконный менеджер не сможет украсть ваши нажатия клавиш.Однако это означает, что вы потеряете собственную оконную раму (включая оформление, перемещение и изменение размера), поэтому вероятно вы не захотите делать это .

Другой способ: если вашпользователи используют только один или два варианта Linux, добавьте что-то в установщик, который спрашивает пользователя, хотят ли они манипулировать наборами ключей gnome (или какими-либо еще), и, если да, изменяет их через gconftool-2 (или эквивалентный).

...