Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-93489

Not obvious how to generate key events for QML when using QQuickRenderControl

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P2: Important
    • Resolution: Done
    • Affects Version/s: 5.15.2, 6.2
    • Fix Version/s: 6.1.3
    • Component/s: Quick: Other
    • Labels:
      None
    • Platform/s:
      Linux/Wayland, Linux/X11, Linux/Other display system
    • Commits:
      6dfed1ee9c8e03780b222a71f6b90fe2016d8994 (qt/qtdeclarative/dev) 4a9a3a52983652de2b4d91ff6ca25b90a0db930b (qt/qtdeclarative/6.1) a4646cb244963bf4b5667b53dcb25430f91dc814 (qt/qtdeclarative/6.2)

      Description

      Hello,

      I am using a QQuickWindow, QQuickRenderControl and a QOffscreenSurface to render a Qml scene into an OpenGL framebuffer object.For this reason , I am using qt example Qt/Examples/Qt-5.15.2/quick/rendercontrol as a base with some minor modifications.

      Since no window is actually created, it becomes necessary to artificially transfer mouse and keyboard events to QQuickWindow.There was already mousePressEvent example for mouseEvents on renderControl example which works fine that means I can send mouse events to qml.

      Similarly , I tried to implement keyPressEvent and keyReleaseEvent by using QCoreApplication::sendEvent(m_quickWindow, e); function call but it does not send key events to qml even if I set force to true for a rectangle. When I debug the issue , I have observed that activeFocusItem is NULL on qquickwindow.cpp ==> deliverKeyEvent function.

      After that , I put a mousearea inside rectangle and call forceActiveFocus() function for rectangle and then keyPressEvent are sent to qml succesfully.Also, If I put timer and call forceActiveFocus for rectangle on some interval it also works but If I try to call same forceActiveFocus() function on Component.onCompleted it is not sending any key events to qml.

      So Do I have to call forceActiveFocus() to manage key sending for offscreen surface ? Also if I have to call forceActiveFocus() from qml , then is there any way to call it instead of timer or mousearea ?

      I attached a simple application, Could you please check the issue ?

      Best Regards

        Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

            Assignee:
            lagocs Laszlo Agocs
            Reporter:
            ekrems Ekrem Şahin
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Gerrit Reviews

                There are no open Gerrit changes