处理键事件Ctrl + Tab和Ctrl + Shift + Tab

lee*_*mes 7 qt keyboard-shortcuts event-handling qml

我想处理两个关键事件Ctrl+ TabCtrl+ Shift+ Tab,以便在我的应用程序中的选项卡之间切换(分别为"前进"和"后退").但是,这似乎没有按预期工作.

这是我目前的代码(最小例子):

import QtQuick 1.1

Item {
    width: 100
    height: 100

    focus: true

    Keys.onPressed: {
        if(event.modifiers & Qt.ControlModifier) {
            if(event.key === Qt.Key_Tab) {
                if(event.modifiers & Qt.ShiftModifier)
                    console.log('backward')
                else
                    console.log('forward')
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我运行了这段代码qmlviewer(Qt版本4.8.2)

Ctrl+ 时输出Tab:

forward
forward
Run Code Online (Sandbox Code Playgroud)

Ctrl+ Shift+ 时输出Tab:

没有

所以我看到两个错误:前一个键序列被处理两次而另一个根本没有处理.

  • 编辑:解决另一个根本没有得到处理的原因,请参阅评论.

为什么会发生这种情况,我该如何解决?

注意:我已在我的应用程序中使用Qt Components for Desktop,因此如果您知道需要此模块的解决方案,则可以.

Mev*_*vos 8

您必须接受该事件,否则该事件将传播给父母,直到被接受为止.以下代码对我有用.

Item {
    width: 100
    height: 100

    focus: true

    Keys.onPressed: {
        if(event.modifiers && Qt.ControlModifier) {
            if(event.key === Qt.Key_Tab) {
                console.log('forward')
                event.accepted = true;
            }
            else if(event.key === Qt.Key_Backtab) {
                console.log('backward')
                event.accepted = true;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:此行为允许父母处理孩子无法处理的事件,例如热键之类的事情.

希望这可以帮助!