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. How to activate keyboard shortcut in QMenu
Qt 6.11 is out! See what's new in the release blog

How to activate keyboard shortcut in QMenu

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 6 Posters 7.0k 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.
  • dporobicD Offline
    dporobicD Offline
    dporobic
    wrote on last edited by
    #7

    Tested now with all for ShortcutContext and setting the shortcut to a simple Letter, tried H and F, nothing. What I really find strange is even with the menu open, nothing happens:

    mCloseTab->setText(tr("Close"));
    mCloseTab->setShortcut(QKeySequence(Qt::Key_F));
    mCloseTab->setShortcutContext(Qt::ApplicationShortcut);
    

    ee05c08d-3136-4485-93af-18f66e4a6d29-image.png

    https://github.com/ksnip/ksnip

    1 Reply Last reply
    0
    • dporobicD Offline
      dporobicD Offline
      dporobic
      wrote on last edited by
      #8

      Interesting, I've created a QToolButton in the ContextMenu, just created it and gave it the same QAction as the defaultAction and now it's triggered when the ContextMenu is open:

      mCloseTab->setText(tr("Close"));
      mCloseTab->setShortcut(QKeySequence(Qt::Key_F));
      mCloseTab->setShortcutContext(Qt::ApplicationShortcut);
      
      auto button = new QToolButton(this);
      button->setDefaultAction(mCloseTab);
      

      94658b3d-86fb-4ade-8877-1c69f06762dc-image.png

      Still not working when the menu is closed.

      https://github.com/ksnip/ksnip

      1 Reply Last reply
      0
      • dporobicD Offline
        dporobicD Offline
        dporobic
        wrote on last edited by
        #9

        Giving the QToolButton the QTabWidget as parent seems to be working even with the menu not shown. Just giving the QAction the QTabWidget as parent doesn't work without the QToolButton.

        mCloseTab->setText(tr("Close"));
        mCloseTab->setShortcut(QKeySequence(Qt::Key_F));
        mCloseTab->setShortcutContext(Qt::ApplicationShortcut);
        
        auto button = new QToolButton(parent);
        button->setDefaultAction(mCloseTab);
        button->setFixedSize(0,0);
        

        It's a workaround, but one of the ugly kind. Any idea how to fix this? Is this a bug?

        https://github.com/ksnip/ksnip

        Pl45m4P 1 Reply Last reply
        0
        • dporobicD dporobic

          Giving the QToolButton the QTabWidget as parent seems to be working even with the menu not shown. Just giving the QAction the QTabWidget as parent doesn't work without the QToolButton.

          mCloseTab->setText(tr("Close"));
          mCloseTab->setShortcut(QKeySequence(Qt::Key_F));
          mCloseTab->setShortcutContext(Qt::ApplicationShortcut);
          
          auto button = new QToolButton(parent);
          button->setDefaultAction(mCloseTab);
          button->setFixedSize(0,0);
          

          It's a workaround, but one of the ugly kind. Any idea how to fix this? Is this a bug?

          Pl45m4P Offline
          Pl45m4P Offline
          Pl45m4
          wrote on last edited by
          #10

          @dporobic

          Looks like there is something wrong with shortcuts and contextMenus in general (I dont know if bug or if we dont use it correctly).
          Your hierarchy is somewhat like this:

          • Top level window / MainWindow
            • TabWidget
              • TabWidgets TabBar
              • ContextMenu
                • Action with shortcut

          And here is the problem... You can't say if the action actually receives the key event / shortcut, due to multiple parents and children.

          At least on Window Ctrl + F4 is used (Shortcut List).


          If debugging is the process of removing software bugs, then programming must be the process of putting them in.

          ~E. W. Dijkstra

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

            Hi,

            IIRC, you should add the action to your main widget using the addAction method.

            If you have centralized actions that can be found in several places, you should also centralize their creation and propagate them as needed. Or provide an accessor like QDockWidget's toggleViewAction.

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

            Pl45m4P dporobicD 2 Replies Last reply
            1
            • SGaistS SGaist

              Hi,

              IIRC, you should add the action to your main widget using the addAction method.

              If you have centralized actions that can be found in several places, you should also centralize their creation and propagate them as needed. Or provide an accessor like QDockWidget's toggleViewAction.

              Pl45m4P Offline
              Pl45m4P Offline
              Pl45m4
              wrote on last edited by
              #12

              @SGaist

              But why are these actions and shortcuts in contextMenus possible, if you can not trigger them, even when parent widget has focus or is the only widget? What is the use case for this?


              If debugging is the process of removing software bugs, then programming must be the process of putting them in.

              ~E. W. Dijkstra

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

                Because it would not make sense to have that restriction because you can build these menus and actions in several different ways and that Qt cannot know that you are actually on purpose adding a shortcut to an action that will only be available in a popup menu.

                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
                • SGaistS SGaist

                  Hi,

                  IIRC, you should add the action to your main widget using the addAction method.

                  If you have centralized actions that can be found in several places, you should also centralize their creation and propagate them as needed. Or provide an accessor like QDockWidget's toggleViewAction.

                  dporobicD Offline
                  dporobicD Offline
                  dporobic
                  wrote on last edited by dporobic
                  #14

                  @SGaist said in How to activate keyboard shortcut in QMenu:

                  IIRC, you should add the action to your main widget using the addAction method.

                  The addAction method on the parent seems to be working indeed, need to think about if I should distribute them differently:

                  mCloseTab->setText(tr("Close"));
                  mCloseTab->setShortcut(QKeySequence(Qt::Key_F));
                  mCloseTab->setShortcutContext(Qt::ApplicationShortcut);
                  
                  parent->addAction(mCloseTab);
                  

                  @Pl45m4 it is indeed a close action though it looks like I should be using Ctrl+W which is more cross platform.

                  https://github.com/ksnip/ksnip

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    APSH
                    wrote on last edited by
                    #15

                    How can I change the color of QMenu shortcuts and make them align from the right side?
                    Stylesheets don’t seem to affect the shortcut text

                    jsulmJ 1 Reply Last reply
                    0
                    • A APSH

                      How can I change the color of QMenu shortcuts and make them align from the right side?
                      Stylesheets don’t seem to affect the shortcut text

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #16

                      @APSH What does your question have to do with this 5 years old topic?
                      You should create a new one.

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      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