在某些情况下未处理Keys.onPressed的键盘事件

时间:2019-07-16 10:47:21

标签: qt qml

我正在尝试从嵌入式系统上的Linux(使用Yocto Project定制构建)下运行的应用程序中,通过USB摄像头获取按钮事件。目前,我正在使用Qt 5.6.3。我的问题是,当我从PC上通过SSH(通过Qt Creator和简单的shell)通过SSH运行代码时,下面显示的代码就像一个超级按钮一样工作,但是如果我直接在系统上运行同一程序却不使用SSH,则什么也没做当我单击相机上的按钮(实际上也没有键盘上的任何其他键)时,会发生这种情况。

在网上跟随一些示例之后,我使用了Keys.onPressed,然后过滤该事件以获得所需的行为。为了全局获取它,我将事件处理程序直接放在ApplicationWindow中的Item中。

ApplicationWindow {
    Item {
        focus: true
        Keys.onPressed:{
            console.log(event.key)
            playSound.play() //I play a sound to be sure a button is clicked
            if(camera.recording && event.key === 16777466) {
            //do stuff for the right key here            
            }
        }
    }
    //Other elements here
}

我认为这与系统上运行的X服务器有关。但是所有内容都是默认的,我真的不知道要在系统中查找什么以提示什么不起作用。任何建议我将不胜感激。

3 个答案:

答案 0 :(得分:0)

您能证明设置项目的宽度和高度吗?

答案 1 :(得分:0)

也许是与Focus有关的问题。在onCompleted事件发生后强制焦点会怎样?

ApplicationWindow {
    Item {
        id: myItem
        focus: true
        Keys.onPressed:{
            console.log(event.key)
            playSound.play() //I play a sound to be sure a button is clicked
            if(camera.recording && event.key === 16777466) {
            //do stuff for the right key here
            }
        }
        Component.onCompleted: {
            myItem.forceActiveFocus()
        }
    }
    Component.onCompleted: {
        myItem.forceActiveFocus()
    }
    //Other elements here
}

答案 2 :(得分:0)

经过几个小时的搜索,结果发现X服务器的“活动窗口”确实存在问题,但是解决方案非常简单,我只需要添加requestActivate();即可。在我的主视图上是这样的:

name