QT - Поймайте события, обычно обрабатываемые менеджером Window

StackOverflow https://stackoverflow.com/questions/6336730

Вопрос

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

В настоящее время я строю приложение CAD, пользователь взаимодействует в 3D -портах View, в основном через мышь и три модификатора клавиатуры (ALT, SHIFT, CTRL). Shift and Control изменяют выбранные в настоящее время параметры инструмента, а ALT управляет камерой - так же, как любое другое приложение для 3D CAD.

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

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

Спасибо,
Камера

Это было полезно?

Решение

Если вы используете QT :: x11bypasswindowmanagerhint на окне, то Window Manager не может украсть ваши ключи. Однако это означает, что вы теряете нативную оконную рамку (включая украшение, перемещение и изменение размера), так что это вероятно ты не хочешь этого делать.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top