How to call qt keyPressEvent(QKeyEvent *event) from qml Keys.onPressed
我有一个带有项目的qml窗口
1 2 | Keys.onPressed { } |
我有一个C ++类
1 2 | protected: void keyPressEvent(QKeyEvent *event); |
什么需要进入Keys.onPressed内部? 我试过了
1 | myclass.keyPressEvent(event) |
并且我在我的c ++类中尝试了一个带有参数(QKeyEvent * event)的公共Q_INVOKABLE函数(handleKeyPress),我想从中调用keyPressEvent。
在运行时,前者给出
"TypeError: Property 'keyPressEvent' of object myclass is not a
function"
后者
"Error: Unknown method parameter type: QKeyEvent*".
(然后我发现qml只能处理指向QObject的指针,并且QKeyEvent不能从QObject继承,但这无助于我寻找解决方案。)
那么从qml获取keyPressEvent的正确方法是什么? 或者如果这完全是错误的方法,那么如果我的班级需要QKeyEvent可以像按下哪个键等给我信息的话,正确的方法是什么?
C ++
1 2 3 4 5 6 7 8 9 10 | protected: Q_INVOKABLE void someMethod(QObject *event){ qDebug()<<"key" << event->property("key").toInt(); qDebug()<<"text" << event->property("text").toString(); qDebug()<<"modifiers" << event->property("modifiers").toInt(); qDebug()<<"isAutoRepeat" << event->property("isAutoRepeat").toBool(); qDebug()<<"count" << event->property("count").toInt(); qDebug()<<"nativeScanCode" << event->property("nativeScanCode").value<quint32>(); qDebug()<<"accepted" << event->property("accepted").toBool(); } |
QML:
1 | Keys.onPressed: myclass_obj.someMethod(event) |
但是不建议这样做。 您的类不应直接知道事件,但最好的事情是您处理QML中的逻辑以及该函数:
1 2 3 4 5 6 7 8 | Keys.onPressed: { if(event.key === Qt.Key_A){ myclass_obj.foo_A() } else if(event.key === Qt.Key_B){ myclass_obj.foo_B() } } |
或者,如果您只想知道密钥,则如下所示
C ++
1 2 3 | Q_INVOKABLE void someMethod(int key){ qDebug()<< key; } |
QML
1 | Keys.onPressed: myclass_obj.someMethod(event.key) |