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. QML Key Event Problem
Forum Updated to NodeBB v4.3 + New Features

QML Key Event Problem

Scheduled Pinned Locked Moved Solved QML and Qt Quick
3 Posts 2 Posters 1.9k Views 2 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.
  • AlienA Offline
    AlienA Offline
    Alien
    wrote on last edited by
    #1

    Hello,

    I've implemented small application with two event handling on keyboard keys to capture press and release event I don't know why press and release event com after each other while I hold the press?

    import QtQuick 2.10
    import QtQuick.Window 2.10
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
    
    
        Item {
    
            focus: true
            Keys.onPressed: {
                if (event.key == Qt.Key_Left)
                {
                    console.log("move left pressed");
                    event.accepted = true;
                }
            }
            Keys.onReleased: {
    
                if (event.key == Qt.Key_Left)
                {
                    console.log("move left released");
                    event.accepted = true;
                }
            }
        }
    }
    
    

    While I press left arrow the output is:

    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    qml: move left pressed
    qml: move left released
    

    Best regards,
    Alien

    DiracsbracketD 1 Reply Last reply
    1
    • AlienA Alien

      Hello,

      I've implemented small application with two event handling on keyboard keys to capture press and release event I don't know why press and release event com after each other while I hold the press?

      import QtQuick 2.10
      import QtQuick.Window 2.10
      
      Window {
          visible: true
          width: 640
          height: 480
          title: qsTr("Hello World")
      
      
          Item {
      
              focus: true
              Keys.onPressed: {
                  if (event.key == Qt.Key_Left)
                  {
                      console.log("move left pressed");
                      event.accepted = true;
                  }
              }
              Keys.onReleased: {
      
                  if (event.key == Qt.Key_Left)
                  {
                      console.log("move left released");
                      event.accepted = true;
                  }
              }
          }
      }
      
      

      While I press left arrow the output is:

      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      qml: move left pressed
      qml: move left released
      

      Best regards,
      Alien

      DiracsbracketD Offline
      DiracsbracketD Offline
      Diracsbracket
      wrote on last edited by Diracsbracket
      #2

      @Alien
      Use the event's isAutoRepeat property to check if it's an auto-repetition:

              Keys.onPressed: {
                  if (event.key === Qt.Key_Left && !event.isAutoRepeat)
                  {
                      console.log("move left pressed");
                      event.accepted = true;
                  }
              }
              Keys.onReleased: {
      
                  if (event.key === Qt.Key_Left  && !event.isAutoRepeat)
                  {
                      console.log("move left released");
                      event.accepted = true;
                  }
              }
      
      1 Reply Last reply
      4
      • AlienA Offline
        AlienA Offline
        Alien
        wrote on last edited by Alien
        #3

        @Diracsbracket Thank you so much

        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