QT - Поймайте события, обычно обрабатываемые менеджером Window
-
27-10-2019 - |
Вопрос
Я не уверен, как сформулировать вопрос кратко, поэтому, если есть аналогичный вопрос, укажите мне правильное направление и закройте этот.
В настоящее время я строю приложение 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 (или эквивалент).