7

我想处理两个关键事件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')
            }
        }
    }
}

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

Ctrl+时输出Tab

forward
forward

Ctrl+ Shift+时输出Tab

没有任何

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

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

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

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

4

1 回答 1

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;
            }
        }
    }
}

编辑:这种行为让父母可以处理孩子无法处理的事件,比如热键。

希望这可以帮助!

于 2012-11-10T19:58:13.530 回答