Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Filtering shortcut in eventFilter not working

Filtering shortcut in eventFilter not working

Scheduled Pinned Locked Moved Unsolved General and Desktop
eventfiltershortcut
12 Posts 4 Posters 5.1k 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi,

    Shouldn't that be QEvent::Shortcut ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    M 1 Reply Last reply
    0
    • SGaistS SGaist

      Hi,

      Shouldn't that be QEvent::Shortcut ?

      M Offline
      M Offline
      mpergand
      wrote on last edited by mpergand
      #3

      Hi @SGaist

      I tried allready, such event never occured ...

      For a single key stroke, I see two ShortcutOverride event:

      shortcut override "Couper" "Ctrl+X" TextEdit(0x7f8fae45a5d0)
      shortcut override "Couper" "Ctrl+X" TextDocWindow(0x7f8fae459c80)
      

      Maybe I need to filter in the widgets too ?

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #4

        Something's not clear, why do you want to disable the action that is associated with the shortcut when you actually call the shortcut ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        JonBJ M 2 Replies Last reply
        0
        • SGaistS SGaist

          Something's not clear, why do you want to disable the action that is associated with the shortcut when you actually call the shortcut ?

          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by
          #5

          @SGaist
          I wondered that earlier too :) I think you can ignore the action->setEnabled(false); // disable it, I read the OP's question as why does return true; // has no effect have no effect?

          1 Reply Last reply
          0
          • SGaistS SGaist

            Something's not clear, why do you want to disable the action that is associated with the shortcut when you actually call the shortcut ?

            M Offline
            M Offline
            mpergand
            wrote on last edited by mpergand
            #6

            @SGaist said in Filtering shortcut in eventFilter not working:

            why do you want to disable the action that is associated with the shortcut when you actually call the shortcut ?

            Yes and I want that the action was not triggered (logical ?)
            Why ? yes I know, it's not the common way to do.
            Actually, I try to implement a responder chain for the menu management.

            What I see, is that the action method is called so I need an extra test in it:

            void Application::menuAction(QAction* action)
            {
                // validateAction dans event filter sans effet
            // test action state
                if(!action->isEnabled()) return;
            ...
            

            In addition on Mac, the menu is flashing but no action takes place in fact.
            But if I do the same key stroke a second time, the action is not triggered, so the action state (disabled) is not take in account immediately in the event filter.
            That's why I would like to discard the shortcut event.

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #7

              Again, that sounds counter-intuitive and convoluted. Why not just disable the action when it should not be used ?

              What chain do you want to build with that ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mpergand
                wrote on last edited by
                #8

                It turns out, that the filter works well, if I return yes in the event filter, the shortcut is not propagated to the TextEdit, so far so good.

                The final question is, who triggers the action ?

                @SGaist
                The "Responder Chain" is a very good paradigm for menu management, unfortunatly not easy to implement in Qt.

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  Unless we have a different definition of Responder Chain, it's what Qt implements. Hence my question about what you are trying to achieve.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  M 1 Reply Last reply
                  0
                  • SGaistS SGaist

                    Unless we have a different definition of Responder Chain, it's what Qt implements. Hence my question about what you are trying to achieve.

                    M Offline
                    M Offline
                    mpergand
                    wrote on last edited by mpergand
                    #10

                    @SGaist said in Filtering shortcut in eventFilter not working:

                    Unless we have a different definition of Responder Chain, it's what Qt implements.

                    I agree, but does it apply with menu actions ?
                    What I want to do, is the same thing as validateMenuItem on MacOS.
                    validatemenuitem

                    On Mac, this method is called before a menu appears (menuAboutToShow on Qt), but also before a shortcut is triggered, allowing to validate the menu at the time the action occurs.
                    That what I'm trying to do with a eventFilter.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      With Qt, you usually trigger a signal when conditions are met that you connect to the setEnable of the QAction you want. Or you modify the action object directly.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • Q Offline
                        Q Offline
                        Qiang0203
                        wrote on last edited by
                        #12

                        I think you need to explicitly accept the event to trigger the override, as mentioned in the QKeyEvent doc.
                        Call "event->accept()" before "return true" may resolve your problem.

                        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