Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Intercept QML keys on C++ side.
Qt 6.11 is out! See what's new in the release blog

Intercept QML keys on C++ side.

Scheduled Pinned Locked Moved Solved QML and Qt Quick
24 Posts 2 Posters 14.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • dheerendraD Offline
    dheerendraD Offline
    dheerendra
    Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
    wrote on last edited by dheerendra
    #13

    You can do this with simple timer which fires after 10 minutes. Inside the handler just check whether key event happened. I'm not in favor of event filter in QApplication becz, every event goes there, checks & then responds. It is risky & performance hit.

    Dheerendra
    @Community Service
    Certified Qt Specialist
    https://www.pthinks.com

    1 Reply Last reply
    1
    • E Offline
      E Offline
      egor.utsov
      wrote on last edited by
      #14

      @dheerendra how i can save time of last key event in this case?

      1 Reply Last reply
      0
      • dheerendraD Offline
        dheerendraD Offline
        dheerendra
        Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
        wrote on last edited by dheerendra
        #15

        you can use the following

        Window {
            visible: true
            width: 640
            height: 480
            title: qsTr("Hello World")
            property date startDate :new Date();
            property int mils;
            Timer{
                id : tim
                interval: 10000
                repeat: true
                running: true
                onTriggered: {
                    var end  = new Date();
                    var elapsed = end.getTime() - startDate.getTime()
                    if (elapsed>=10000){
                        console.log("Blackout")
                    }else {
                        console.log("No blackout")
                        startDate = new Date()
                    }
                }
            }
        
            Rectangle{
                anchors.fill: parent
                focus: true
                objectName: "Dheerendra"
                Keys.onPressed: {
                    console.log("Key is pressed")
                    startDate = new Date();
                }
            }
        }
        

        Dheerendra
        @Community Service
        Certified Qt Specialist
        https://www.pthinks.com

        1 Reply Last reply
        1
        • E Offline
          E Offline
          egor.utsov
          wrote on last edited by
          #16

          @dheerendra i have many places, where key processed. It is hard to put such code everywhere

          1 Reply Last reply
          0
          • dheerendraD Offline
            dheerendraD Offline
            dheerendra
            Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
            wrote on last edited by
            #17

            It can be componetized as well. If it is everywhere, catch at the source only with qApp.

            Dheerendra
            @Community Service
            Certified Qt Specialist
            https://www.pthinks.com

            1 Reply Last reply
            1
            • E Offline
              E Offline
              egor.utsov
              wrote on last edited by
              #18

              @dheerendra once again - key events does not appear in filter. Think it is worth to mention that i use linuxfb plugin withOUT libinput.

              1 Reply Last reply
              0
              • dheerendraD Offline
                dheerendraD Offline
                dheerendra
                Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
                wrote on last edited by
                #19

                basic question - In your program are you able to catch/handle the keyboard events ?

                Dheerendra
                @Community Service
                Certified Qt Specialist
                https://www.pthinks.com

                1 Reply Last reply
                1
                • E Offline
                  E Offline
                  egor.utsov
                  wrote on last edited by
                  #20

                  @dheerendra qml ui react to key presses.

                  1 Reply Last reply
                  0
                  • dheerendraD Offline
                    dheerendraD Offline
                    dheerendra
                    Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
                    wrote on last edited by
                    #21

                    @egor.utsov said in Intercept QML keys on C++ side.:

                    if (event->type() == QEvent::Type::KeyPress || event->type() == QEvent::KeyRelease)

                    Can you just print the event type in eventFilter function ? Right now it is condition based. When you press the keyboard let us see what type events are coming. This may give us hint. If not we will do something else.

                    Dheerendra
                    @Community Service
                    Certified Qt Specialist
                    https://www.pthinks.com

                    1 Reply Last reply
                    1
                    • E Offline
                      E Offline
                      egor.utsov
                      wrote on last edited by
                      #22

                      @dheerendra i am also tried to enable QT_LOGGING_RULES="qt.qpa.input=true", but key events still not printed, however i see beginning of qpa logs

                      1 Reply Last reply
                      0
                      • dheerendraD Offline
                        dheerendraD Offline
                        dheerendra
                        Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
                        wrote on last edited by dheerendra
                        #23

                        while we debug this issue, another option what you can try is Keys.forwardTo option in qml. We can make all the key events forward to one common object. This common object can handle your blackout logic.

                        what is happening in eventfilter function ? Is it printing the type as key event or not ?

                        Dheerendra
                        @Community Service
                        Certified Qt Specialist
                        https://www.pthinks.com

                        1 Reply Last reply
                        1
                        • E Offline
                          E Offline
                          egor.utsov
                          wrote on last edited by
                          #24

                          @dheerendra Hi. I reboot the unit and now key events appeared in filter. I don't know whats changed, but it works now. Thank you for help and sorry for bothering

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved