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. QPushButton in QMessageBox missing key shortcut underline on initial display
Forum Updated to NodeBB v4.3 + New Features

QPushButton in QMessageBox missing key shortcut underline on initial display

Scheduled Pinned Locked Moved Solved General and Desktop
qpushbuttonqmessageboxshortcutunderline
24 Posts 4 Posters 14.1k 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.
  • K kshegunov
    9 Mar 2016, 22:52

    @Harry123
    Try the qt_set_sequence_auto_mnemonic function.

    Kind regards.

    H Offline
    H Offline
    Harry123
    wrote on 10 Mar 2016, 11:57 last edited by
    #11

    @kshegunov

    qt_set_sequence_auto_mnemonic is not found by the linker.
    In which library is it supposed to be ?
    I have both Qt5Gui and Qt5Core in the link.

    K 1 Reply Last reply 10 Mar 2016, 12:22
    0
    • H Harry123
      10 Mar 2016, 11:57

      @kshegunov

      qt_set_sequence_auto_mnemonic is not found by the linker.
      In which library is it supposed to be ?
      I have both Qt5Gui and Qt5Core in the link.

      K Offline
      K Offline
      kshegunov
      Moderators
      wrote on 10 Mar 2016, 12:22 last edited by kshegunov 3 Oct 2016, 13:10
      #12

      @Harry123
      My guess would be in the gui module, but I have never used it so I'm not 100% sure. I checked and on my 5.6 build I found it in libQt5Gui.so:

      0000000000138d02 T _Z29qt_set_sequence_auto_mnemonicb
      

      So, the answer is: it is located in the gui module.

      Read and abide by the Qt Code of Conduct

      H 1 Reply Last reply 10 Mar 2016, 13:23
      0
      • K kshegunov
        10 Mar 2016, 12:22

        @Harry123
        My guess would be in the gui module, but I have never used it so I'm not 100% sure. I checked and on my 5.6 build I found it in libQt5Gui.so:

        0000000000138d02 T _Z29qt_set_sequence_auto_mnemonicb
        

        So, the answer is: it is located in the gui module.

        H Offline
        H Offline
        Harry123
        wrote on 10 Mar 2016, 13:23 last edited by
        #13

        @kshegunov

        Unfortunately it seems to be missing from the Windows build.

        K 1 Reply Last reply 10 Mar 2016, 14:44
        0
        • H Harry123
          10 Mar 2016, 13:23

          @kshegunov

          Unfortunately it seems to be missing from the Windows build.

          K Offline
          K Offline
          kshegunov
          Moderators
          wrote on 10 Mar 2016, 14:44 last edited by
          #14

          @Harry123
          Your claim seemed somewhat dubious, so even if I don't actively develop on windows I've loaded the gui module and searched through it with the dependency walker. The symbol is there (Qt 5.5.1 installed with Qt maintenance tool), see the screenshot, and it is exported.
          qt_set_sequence_auto_mnemonic
          I don't know what error exactly you're getting but you should be able to use the function if declared properly (as mentioned in the documentation I sourced in my previous post).

          Read and abide by the Qt Code of Conduct

          H 1 Reply Last reply 10 Mar 2016, 15:00
          0
          • K kshegunov
            10 Mar 2016, 14:44

            @Harry123
            Your claim seemed somewhat dubious, so even if I don't actively develop on windows I've loaded the gui module and searched through it with the dependency walker. The symbol is there (Qt 5.5.1 installed with Qt maintenance tool), see the screenshot, and it is exported.
            qt_set_sequence_auto_mnemonic
            I don't know what error exactly you're getting but you should be able to use the function if declared properly (as mentioned in the documentation I sourced in my previous post).

            H Offline
            H Offline
            Harry123
            wrote on 10 Mar 2016, 15:00 last edited by
            #15

            @kshegunov

            Sorry, my claim was more than dubious - unfortunately I put the call in a section of extern "C".
            Stupid mistake, but this is a complicated body of code.

            Results: calling qt_set_sequence_auto_mnemonic with the parameters of either true or false did not restore the underlines.

            K 1 Reply Last reply 10 Mar 2016, 15:07
            0
            • H Harry123
              10 Mar 2016, 15:00

              @kshegunov

              Sorry, my claim was more than dubious - unfortunately I put the call in a section of extern "C".
              Stupid mistake, but this is a complicated body of code.

              Results: calling qt_set_sequence_auto_mnemonic with the parameters of either true or false did not restore the underlines.

              K Offline
              K Offline
              kshegunov
              Moderators
              wrote on 10 Mar 2016, 15:07 last edited by
              #16

              @Harry123

              Results: calling qt_set_sequence_auto_mnemonic with the parameters of either true or false did not restore the underlines.

              That's unfortunate. Another thing you could try is to set a global proxy style for your application and manually force the QStyle::SH_UnderlineShortcut flag.

              Kind regards.

              Read and abide by the Qt Code of Conduct

              H 1 Reply Last reply 10 Mar 2016, 15:26
              1
              • K kshegunov
                10 Mar 2016, 15:07

                @Harry123

                Results: calling qt_set_sequence_auto_mnemonic with the parameters of either true or false did not restore the underlines.

                That's unfortunate. Another thing you could try is to set a global proxy style for your application and manually force the QStyle::SH_UnderlineShortcut flag.

                Kind regards.

                H Offline
                H Offline
                Harry123
                wrote on 10 Mar 2016, 15:26 last edited by Harry123 3 Oct 2016, 15:45
                #17

                @kshegunov

                This works. I modified the example in the link with :

                    if (hint == QStyle::SH_UnderlineShortcut)
                        return 1;
                

                I now have underlines. Much better than faking an Alt key and it works for all future dialogs.

                Very many thanks.

                K 1 Reply Last reply 10 Mar 2016, 17:16
                0
                • H Harry123
                  10 Mar 2016, 15:26

                  @kshegunov

                  This works. I modified the example in the link with :

                      if (hint == QStyle::SH_UnderlineShortcut)
                          return 1;
                  

                  I now have underlines. Much better than faking an Alt key and it works for all future dialogs.

                  Very many thanks.

                  K Offline
                  K Offline
                  kshegunov
                  Moderators
                  wrote on 10 Mar 2016, 17:16 last edited by
                  #18

                  @Harry123

                  faking an Alt key

                  Well, this could also have unforeseeable side effects as well (if for example some widget has a shortcut bound to that key), so it's a bit hackish.

                  Very many thanks.

                  You're most welcome.

                  Read and abide by the Qt Code of Conduct

                  H 1 Reply Last reply 10 Mar 2016, 20:01
                  0
                  • K kshegunov
                    10 Mar 2016, 17:16

                    @Harry123

                    faking an Alt key

                    Well, this could also have unforeseeable side effects as well (if for example some widget has a shortcut bound to that key), so it's a bit hackish.

                    Very many thanks.

                    You're most welcome.

                    H Offline
                    H Offline
                    Harry123
                    wrote on 10 Mar 2016, 20:01 last edited by Harry123 3 Oct 2016, 20:02
                    #19

                    @kshegunov

                    The only question that is left, is why isn't QStyle::SH_UnderlineShortcut the default .

                    K 1 Reply Last reply 10 Mar 2016, 20:53
                    0
                    • H Harry123
                      10 Mar 2016, 20:01

                      @kshegunov

                      The only question that is left, is why isn't QStyle::SH_UnderlineShortcut the default .

                      K Offline
                      K Offline
                      kshegunov
                      Moderators
                      wrote on 10 Mar 2016, 20:53 last edited by
                      #20

                      @Harry123
                      I'd say the default is determined by the OS settings, and Qt simply wouldn't presume to override it. That'd explain why when you change the settings systemwide the behavior changes accordingly.

                      Read and abide by the Qt Code of Conduct

                      H 1 Reply Last reply 11 Mar 2016, 09:19
                      0
                      • K kshegunov
                        10 Mar 2016, 20:53

                        @Harry123
                        I'd say the default is determined by the OS settings, and Qt simply wouldn't presume to override it. That'd explain why when you change the settings systemwide the behavior changes accordingly.

                        H Offline
                        H Offline
                        Harry123
                        wrote on 11 Mar 2016, 09:19 last edited by Harry123 3 Nov 2016, 09:27
                        #21

                        @kshegunov

                        I don't think this is a system default, since Qt paints its buttons itself and does not use native widgets.
                        I say this because if I look into a Qt dialog using Spy++, it has no children, so no native objects.
                        The reason for this design decision is probably that there was no other way to assure identical functionality across all platforms.

                        Therefore this is a Qt default which in my opinion is badly chosen, since the Windows default is just the opposite - to always underline button shortcuts in dialogs.

                        K 1 Reply Last reply 11 Mar 2016, 10:30
                        0
                        • mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 11 Mar 2016, 09:46 last edited by
                          #22

                          my windows 7 do not have underscore as default.
                          only when i press alt.
                          That goes for buttons and menus.
                          Except some common file open dialog it seems :)

                          1 Reply Last reply
                          0
                          • H Harry123
                            11 Mar 2016, 09:19

                            @kshegunov

                            I don't think this is a system default, since Qt paints its buttons itself and does not use native widgets.
                            I say this because if I look into a Qt dialog using Spy++, it has no children, so no native objects.
                            The reason for this design decision is probably that there was no other way to assure identical functionality across all platforms.

                            Therefore this is a Qt default which in my opinion is badly chosen, since the Windows default is just the opposite - to always underline button shortcuts in dialogs.

                            K Offline
                            K Offline
                            kshegunov
                            Moderators
                            wrote on 11 Mar 2016, 10:30 last edited by kshegunov 3 Nov 2016, 10:33
                            #23

                            @Harry123

                            I don't think this is a system default, since Qt paints its buttons itself and does not use native widgets.

                            Which wouldn't stop it to honor the default system behavior, would it?

                            As @mrjj noted:

                            my windows 7 do not have underscore as default.

                            Which had been my experience as well.

                            The reason for this design decision is probably that there was no other way to assure identical functionality across all platforms.

                            This design decision, if memory serves me, happened some time when Qt 4 was developed (which should be about 10 years ago) and it was mostly done because using native handles is costly as hell, and UIs tend to just eat up resources if you have a handle for each tiny thing. And it's been working just fine, if I may add.

                            Kind regards.

                            Read and abide by the Qt Code of Conduct

                            1 Reply Last reply
                            0
                            • H Harry123
                              9 Mar 2016, 12:06

                              I'm under Windows, and I add several QPushButtons to a QMessageBox. A shortcut key is specified by an ampersand before the preferred character in each text.

                              When the message box is initially displayed, the shortcut keys of all buttons are not marked by an underline, but :

                              1. The button does execute if I type the shortcut key in spite of the missing underline.
                              2. If I press the Alt key, the shortcut underline appears on all buttons and stays displayed after I release the Alt key.

                              This lack of an initial visual cue may cause the end-user to assume that shortcuts were not provided.

                              Is there something I should do to force the display of the shortcut underlines when the message box is initially displayed ?

                              J Offline
                              J Offline
                              jortegaruiz
                              wrote on 15 May 2018, 20:09 last edited by
                              #24

                              @Harry123
                              I did it putting this in main.cpp and that's all folks ;-)

                              QApplication a(argc, argv);
                              a.setStyle("fusion");
                              
                              1 Reply Last reply
                              1

                              • Login

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