Send KeyEvent from QWidget to QML element
-
Hello,
I have two windows : one QQuickView and one QGLWidget. The process of key events are made in the root item of the main window QQuickView, so it is made in qml with a javascript function (handler Keys.onPressed).
So now I also want to catch keyevents in QGLWidget, it works well with "keyPressEvent(QKeyEvent* event)", and I want to forward it to my root item in QQuickView.
Here is my code :
@
void MyGLWindow::keyPressEvent(QKeyEvent* event)
{
QKeyEvent* eventCopy = new QKeyEvent(event->type(), event->key(), event->modifiers());
QApplication::postEvent(quickView->rootObject(), eventCopy);
}
@It does not work, does anyone understand why ?
-
Hi,
Did you get any errors ? Can you show the QML code ?
-
No errors.
I am working on Mac 10.8 with QT 5.2.1.QML code:
@
FocusScope {
id: rootwidth: 800 height: 600 focus: true Keys.onPressed: { console.log("Keys pressed QML"); if (event.key === Qt.Key_Escape) { // ... } }
@
My trace is never printed when I press from QLWidget.
-
Same thing with QQuickView object.
I also traced pointers and I am sending to the right object, look :
@
root qml=QQuickFocusScope_QML_95(0x7f7f696ac810)quickView->rootObject()= QQuickFocusScope_QML_95 (this = 0x7f7f696ac810 , name= "" , parent = 0x7f7f69476c00 , geometry = QRectF(0,0 800x600) , z = 0 )
quickView= QQuickView(0x7f7f6947beb0)
@
-
Have you made sure the keyPressEvent() is called ?
-
I was stucked on the same problem and I found a workaround.
If you are still trying to solve the problem let me know and I'll tell you what was my workaround.@Gianluca
Hi Gianluca, i'm facing the same problem, could you please give us your workaroud please ?
Thank you.