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. QFontDialog::getFont() doesn't use correct font style
Forum Updated to NodeBB v4.3 + New Features

QFontDialog::getFont() doesn't use correct font style

Scheduled Pinned Locked Moved Unsolved General and Desktop
29 Posts 3 Posters 10.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.
  • RatzzR Offline
    RatzzR Offline
    Ratzz
    wrote on last edited by
    #2

    @pbe
    have you tried something like this QFont serifFont("Times", 10, QFont::Bold); as shown here .

    P 1 Reply Last reply
    0
    • RatzzR Ratzz

      @pbe
      have you tried something like this QFont serifFont("Times", 10, QFont::Bold); as shown here .

      P Offline
      P Offline
      pbe
      wrote on last edited by
      #3

      @Ratzz said:

      QFont serifFont("Times", 10, QFont::Bold)

      QFont font("Norasi", 10, 50, false) doesn't work neither.
      My real use-case is setting the font with the QFontDialog, storing it to the settings, loading it from the settings and showing it with the QFontDialog again. This doesn't work neither.

      RatzzR 2 Replies Last reply
      0
      • P pbe

        @Ratzz said:

        QFont serifFont("Times", 10, QFont::Bold)

        QFont font("Norasi", 10, 50, false) doesn't work neither.
        My real use-case is setting the font with the QFontDialog, storing it to the settings, loading it from the settings and showing it with the QFontDialog again. This doesn't work neither.

        RatzzR Offline
        RatzzR Offline
        Ratzz
        wrote on last edited by Ratzz
        #4
        This post is deleted!
        1 Reply Last reply
        0
        • P pbe

          @Ratzz said:

          QFont serifFont("Times", 10, QFont::Bold)

          QFont font("Norasi", 10, 50, false) doesn't work neither.
          My real use-case is setting the font with the QFontDialog, storing it to the settings, loading it from the settings and showing it with the QFontDialog again. This doesn't work neither.

          RatzzR Offline
          RatzzR Offline
          Ratzz
          wrote on last edited by
          #5

          @pbe said:

          QFont font("Norasi", 10, 50, false) doesn't work neither.

          try QFont font("Norasi", 11,QFont::bold);

          P 1 Reply Last reply
          0
          • RatzzR Ratzz

            @pbe said:

            QFont font("Norasi", 10, 50, false) doesn't work neither.

            try QFont font("Norasi", 11,QFont::bold);

            P Offline
            P Offline
            pbe
            wrote on last edited by
            #6

            @Ratzz
            QFont font("Norasi", 10, QFont::Bold): works
            QFont font("Norasi", 10, QFont::Normal): doesn't work

            RatzzR 1 Reply Last reply
            0
            • P pbe

              @Ratzz
              QFont font("Norasi", 10, QFont::Bold): works
              QFont font("Norasi", 10, QFont::Normal): doesn't work

              RatzzR Offline
              RatzzR Offline
              Ratzz
              wrote on last edited by
              #7

              @pbe said:

              QFont font("Norasi", 10, QFont::Normal): doesn't work

              This is because Norasi family do not have Normal style.
              Image

              1 Reply Last reply
              0
              • P Offline
                P Offline
                pbe
                wrote on last edited by
                #8

                But there is only Normal at http://doc.qt.io/qt-5/qfont.html#Style-enum. :(
                And the real thing I am doing in https://github.com/pbek/QOwnNotes/blob/develop/src/dialogs/settingsdialog.cpp is saving a selected font to the setting and loading it again next time the settings dialog is opened. When I then open the font dialog with that font the style is wrong...

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  pbe
                  wrote on last edited by
                  #9

                  I made a new topic with a better example: https://forum.qt.io/topic/69348/qfontdialog-getfont-doesn-t-use-correct-font-style-when-font-of-the-font-parameter-use-tostring-and-fromstring

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pbe
                    wrote on last edited by
                    #10

                    @kshegunov, could you please open https://forum.qt.io/topic/69348/qfontdialog-getfont-doesn-t-use-correct-font-style-when-font-of-the-font-parameter-use-tostring-and-fromstring again, since it has the more valid test to reproduce the problem. We can mark this topic as duplicate instead, if that's ok with you. It wasn't my intention to cause any harm, the two cases could be related and I wasn't sure if I it's good to post the whole topic text as reply here.

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      pbe
                      wrote on last edited by
                      #11

                      On 2nd glance, maybe it's really better to reply here.
                      So here comes by better example:

                      QFontDialog::getFont() doesn't use the correct font style when the font of the font parameter uses toString() and fromString().
                      It always uses the first font style in the list instead of the style (normal) and weight (regular) of the QFont parameter.
                      I made an example:

                      bool ok;
                      
                      // select a font where `Regular` is not the first item in the `Font
                      // style` selector (e.g. `Noto Sans`) and select `Regular`
                      QFont font = QFontDialog::getFont(&ok);
                      if (ok) {
                          // looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                          qDebug() << "'font': " << font;
                      
                          QFont font2;
                          // I originally store the font to the settings and load it again, but
                          // that's not even needed to reproduce this problem
                          font2.fromString(font.toString());
                          // still looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                          qDebug() << "'font2': " << font2;
                      
                          // now `Bold Italic` is selected, because it's the first item
                          QFont font3 = QFontDialog::getFont(&ok, font2, this);
                      
                          if (ok) {
                              // would now look like `QFont( "Noto Sans,11,-1,5,75,1,0,0,0,0" )`
                              qDebug() << "'font3': " << font3;
                          }
                      }
                      

                      I was testing under:

                      Platform: linux
                      Operating System: KDE neon User Edition 5.7
                      Build architecture: x86_64
                      Current architecture: x86_64
                      Qt Version (build): 5.7.0
                      Qt Version (runtime): 5.7.0

                      (The problem was initially reported by a user of QOwnNotes at https://github.com/pbek/QOwnNotes/issues/239.)

                      Am I doing something wrong?
                      Thanks a lot for your help!

                      kshegunovK 2 Replies Last reply
                      0
                      • P pbe

                        On 2nd glance, maybe it's really better to reply here.
                        So here comes by better example:

                        QFontDialog::getFont() doesn't use the correct font style when the font of the font parameter uses toString() and fromString().
                        It always uses the first font style in the list instead of the style (normal) and weight (regular) of the QFont parameter.
                        I made an example:

                        bool ok;
                        
                        // select a font where `Regular` is not the first item in the `Font
                        // style` selector (e.g. `Noto Sans`) and select `Regular`
                        QFont font = QFontDialog::getFont(&ok);
                        if (ok) {
                            // looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                            qDebug() << "'font': " << font;
                        
                            QFont font2;
                            // I originally store the font to the settings and load it again, but
                            // that's not even needed to reproduce this problem
                            font2.fromString(font.toString());
                            // still looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                            qDebug() << "'font2': " << font2;
                        
                            // now `Bold Italic` is selected, because it's the first item
                            QFont font3 = QFontDialog::getFont(&ok, font2, this);
                        
                            if (ok) {
                                // would now look like `QFont( "Noto Sans,11,-1,5,75,1,0,0,0,0" )`
                                qDebug() << "'font3': " << font3;
                            }
                        }
                        

                        I was testing under:

                        Platform: linux
                        Operating System: KDE neon User Edition 5.7
                        Build architecture: x86_64
                        Current architecture: x86_64
                        Qt Version (build): 5.7.0
                        Qt Version (runtime): 5.7.0

                        (The problem was initially reported by a user of QOwnNotes at https://github.com/pbek/QOwnNotes/issues/239.)

                        Am I doing something wrong?
                        Thanks a lot for your help!

                        kshegunovK Offline
                        kshegunovK Offline
                        kshegunov
                        Moderators
                        wrote on last edited by
                        #12

                        @pbe said:

                        On 2nd glance, maybe it's really better to reply here.

                        It is, indeed, for several reasons.

                        • The whole problem history is at a glance
                        • The people who responded will get a notification there's activity on the topic.
                        • The additional information may attract more or better answers

                        and so on.

                        Kind regards.

                        Read and abide by the Qt Code of Conduct

                        1 Reply Last reply
                        0
                        • P pbe

                          On 2nd glance, maybe it's really better to reply here.
                          So here comes by better example:

                          QFontDialog::getFont() doesn't use the correct font style when the font of the font parameter uses toString() and fromString().
                          It always uses the first font style in the list instead of the style (normal) and weight (regular) of the QFont parameter.
                          I made an example:

                          bool ok;
                          
                          // select a font where `Regular` is not the first item in the `Font
                          // style` selector (e.g. `Noto Sans`) and select `Regular`
                          QFont font = QFontDialog::getFont(&ok);
                          if (ok) {
                              // looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                              qDebug() << "'font': " << font;
                          
                              QFont font2;
                              // I originally store the font to the settings and load it again, but
                              // that's not even needed to reproduce this problem
                              font2.fromString(font.toString());
                              // still looks like `QFont( "Noto Sans,11,-1,5,50,0,0,0,0,0" )`
                              qDebug() << "'font2': " << font2;
                          
                              // now `Bold Italic` is selected, because it's the first item
                              QFont font3 = QFontDialog::getFont(&ok, font2, this);
                          
                              if (ok) {
                                  // would now look like `QFont( "Noto Sans,11,-1,5,75,1,0,0,0,0" )`
                                  qDebug() << "'font3': " << font3;
                              }
                          }
                          

                          I was testing under:

                          Platform: linux
                          Operating System: KDE neon User Edition 5.7
                          Build architecture: x86_64
                          Current architecture: x86_64
                          Qt Version (build): 5.7.0
                          Qt Version (runtime): 5.7.0

                          (The problem was initially reported by a user of QOwnNotes at https://github.com/pbek/QOwnNotes/issues/239.)

                          Am I doing something wrong?
                          Thanks a lot for your help!

                          kshegunovK Offline
                          kshegunovK Offline
                          kshegunov
                          Moderators
                          wrote on last edited by
                          #13

                          @pbe
                          Hi,
                          There's a bug - QTBUG-52741 that appears to be what you're describing. I also run your example through the debugger after I was able to reproduce (Qt 5.7) and the problem is indeed in the dialog, here.

                          The dialog matches the family only, and when it calls setCurrentItem it selects the very first item in the model (which has the default style), which in turn will overwrite the member that holds the style and you get what you described. If you use the font object directly you won't get the bug, i.e.:

                          QFont font = QFontDialog::getFont(&ok);
                          if (ok)  {
                              // ...
                              QFont font2 = QFontDialog::getFont(&ok, font, this); //< Works correctly, no bug
                              // ...
                          }
                          

                          Kind regards.

                          Read and abide by the Qt Code of Conduct

                          1 Reply Last reply
                          1
                          • P Offline
                            P Offline
                            pbe
                            wrote on last edited by
                            #14

                            @kshegunov, I already found that bug and was wondering if that's what's affecting QOwnNotes. Thank you for making that clear!

                            Yes, you are right. If you use the font directly it works, but it doesn't work with font2.fromString(font.toString()); that is needed to store and load it to/from the settings. Do you have any ideas to get around this?

                            kshegunovK 1 Reply Last reply
                            0
                            • P pbe

                              @kshegunov, I already found that bug and was wondering if that's what's affecting QOwnNotes. Thank you for making that clear!

                              Yes, you are right. If you use the font directly it works, but it doesn't work with font2.fromString(font.toString()); that is needed to store and load it to/from the settings. Do you have any ideas to get around this?

                              kshegunovK Offline
                              kshegunovK Offline
                              kshegunov
                              Moderators
                              wrote on last edited by kshegunov
                              #15

                              @pbe said:

                              Do you have any ideas to get around this?

                              Sadly, no. The bug seems inherent to the QFontDialog class when the QFont's internal identifier isn't set (i.e. when the dialog needs to go and query about the font by its attributes). If I get some more time in the coming days, I'll try to run it again and hopefully will have something better.

                              Kind regards.

                              Read and abide by the Qt Code of Conduct

                              1 Reply Last reply
                              2
                              • P Offline
                                P Offline
                                pbe
                                wrote on last edited by
                                #16

                                @kshegunov, thank you very much! You are my hero!

                                kshegunovK 1 Reply Last reply
                                0
                                • P pbe

                                  @kshegunov, thank you very much! You are my hero!

                                  kshegunovK Offline
                                  kshegunovK Offline
                                  kshegunov
                                  Moderators
                                  wrote on last edited by
                                  #17

                                  @pbe
                                  I have a bug fix and I'll try to submit it this evening (I've been working in the dev branch, so some git magic is needed).

                                  Kind regards.

                                  Read and abide by the Qt Code of Conduct

                                  P 1 Reply Last reply
                                  1
                                  • kshegunovK kshegunov

                                    @pbe
                                    I have a bug fix and I'll try to submit it this evening (I've been working in the dev branch, so some git magic is needed).

                                    Kind regards.

                                    P Offline
                                    P Offline
                                    pbe
                                    wrote on last edited by
                                    #18

                                    @kshegunov, really? That's wonderful! I can't wait to see it!

                                    kshegunovK 1 Reply Last reply
                                    0
                                    • P pbe

                                      @kshegunov, really? That's wonderful! I can't wait to see it!

                                      kshegunovK Offline
                                      kshegunovK Offline
                                      kshegunov
                                      Moderators
                                      wrote on last edited by kshegunov
                                      #19

                                      @pbe
                                      https://codereview.qt-project.org/#/c/165958/

                                      We'll see if it gets approved.

                                      Read and abide by the Qt Code of Conduct

                                      1 Reply Last reply
                                      1
                                      • P Offline
                                        P Offline
                                        pbe
                                        wrote on last edited by
                                        #20

                                        Thanks a lot, I will watch that request!

                                        kshegunovK 1 Reply Last reply
                                        0
                                        • P pbe

                                          Thanks a lot, I will watch that request!

                                          kshegunovK Offline
                                          kshegunovK Offline
                                          kshegunov
                                          Moderators
                                          wrote on last edited by
                                          #21

                                          @pbe
                                          There's something else, while investigating your bug I stumbled upon this one ... which you may actually encounter, although it's somewhat unrelated to your problem with the dialog.

                                          Read and abide by the 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