C++ 如何从qml Keys.onPressed调用qt keyPressEvent(QKeyEvent*事件)

C++ 如何从qml Keys.onPressed调用qt keyPressEvent(QKeyEvent*事件),c++,qt,qml,qt5,qkeyevent,C++,Qt,Qml,Qt5,Qkeyevent,我有一个qml窗口,其中有一个 Keys.onPressed { } protected: void keyPressEvent(QKeyEvent *event); 我有一个C++类,它有< /P> Keys.onPressed { } protected: void keyPressEvent(QKeyEvent *event); 按键里面需要放什么?按了吗?我试过了 myclass.keyPressEvent(event) 和我尝试了一个参

我有一个qml窗口,其中有一个

Keys.onPressed {
}  
protected:  
    void keyPressEvent(QKeyEvent *event);  

我有一个C++类,它有< /P>

Keys.onPressed {
}  
protected:  
    void keyPressEvent(QKeyEvent *event);  
按键里面需要放什么?按了吗?我试过了

myclass.keyPressEvent(event)

和我尝试了一个参数为“qKeEvg*Evin”的C++类中的<强>公共QQuoNokRebug函数(HooLoKEKEP)<强> >,我想调用它的“强>密钥预置< <强> >p> 在运行时,前者给出

“TypeError:对象myclass的属性'keyPressEvent'不是 功能“

后者

“错误:未知的方法参数类型:QKeyEvent*”

(然后我发现qml只能处理指向QObject的指针,QKeyEvent不能从QObject继承,但这无助于我找到解决方案。)


那么,从qml调用keyPressEvent的正确方法是什么?或者,如果这是一种完全错误的方法,那么如果我的类需要QKeyEvent可以给我的信息,比如按下了哪个键等,那么正确的方法是什么呢?

KeyEvent
不是一个
QKeyEvent*
,而是一个继承自
QObject
并封装了
QKeyEvent
的类,因此,无法访问
QKeyEvent
,但您可以访问q属性,如下所示:

C++


但这并不可取。您的类不应该直接知道事件,但最好是您在QML中处理逻辑,并且函数:

Keys.onPressed: {
    if(event.key === Qt.Key_A){
        myclass_obj.foo_A()
    }
    else if(event.key === Qt.Key_B){
        myclass_obj.foo_B()
    }
}

或者,如果您想知道,则只能使用以下键

C++


谢谢你的解释。非常有用。
Q_INVOKABLE void someMethod(int key){
    qDebug()<< key;
}
Keys.onPressed: myclass_obj.someMethod(event.key)