Обработка модификаторов в QtQuick Shortcut - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть простое приложение QtQuick, скажем

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    Shortcut {
        sequence: "i"
        context: Qt.ApplicationShortcut
        onActivated: {
            console.log("activated!")
        }
    }
}

Когда я нажимаю клавишу «I», я вижу «активирован!»в консоли.Но моя проблема в том, что мое приложение должно реагировать на нажатие клавиши Alt (без основного ключа).Когда я устанавливаю свойство «sequence» в «Alt» (или «Ctrl», «Shift», ... любой модификатор), ничего не происходит.Так есть ли способ обрабатывать нажатие только модификатора внутри ярлыка?

Я думаю, что не могу использовать Keys.onPressed, потому что я хочу обрабатывать клавишу Alt независимо от того, на каком объекте сейчас находится фокус

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Документация говорит, что вы можете написать sequence: "Alt+i", но в настоящее время не можете попробовать это ....

Хорошего дня

0 голосов
/ 01 февраля 2019

Я не думаю, что есть способ сделать это в Windows, если вы там тестируете.Это было проблемой и для моего приложения, где пользователь должен иметь возможность удерживать Alt, чтобы использовать палитру цветов.Хотя работает нормально на macOS и Ubuntu.

Я предполагаю, что это как-то связано с тем, что alt является глобальным ярлыком для активации пунктов меню в Windows ... хотя то же самое верно и для Ubuntu, и там он работает нормально..

Похоже, это проблема, например, для Photoshop на Windows, с несколькими распространенными хакерами, чтобы обойти это:

0 голосов
/ 01 февраля 2019

Это требует немного другого подхода, чем Shortcut, вы можете использовать прикрепленное свойство Keys (http://doc.qt.io/qt-5/qml-qtquick-keyevent.html)

Item {
    focus: true
    Keys.onPressed: { 
        if (event.modifiers & Qt.AltModifier)
             console.log("alt activated")
    }
}

Отказ от ответственности: есть небольшая вероятность того, что он не будет работать, так как модификаторынемного отличаются и, возможно, не вызывают сигнал * 1007. * В этом случае, я надеюсь, я указал вам, по крайней мере, в правильном направлении

...