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. Setting font to QLabel failled
Qt 6.11 is out! See what's new in the release blog

Setting font to QLabel failled

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 5 Posters 18.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.
  • H Offline
    H Offline
    H_V_
    wrote on last edited by VRonin
    #1

    Hi,
    I have a widget with a QLabel and a QLineEdit and I want to be able to modify the font of the QLineEdit without affecting the QLabel font. So I reimplemented the setFont of the widget. I've first try to only apply the new font to the line edit, but if I don't call the base class implementation (QWidget::setFont()) it bugs and nothing is displayed (neither QLabel, neither QLineEdit).
    So I've change to call the base class implementation in my implementation, which makes both QLineEdit and QLabel font change.
    So I saved the QLabel original font before and reapply it after... It does'nt work neither. But if I specify a static font it works.
    Code exemple:

    class MyWidget: public QWidget
    {
      virtual void setFont(const QFont& font);
    private:
      QLineEdit* lineedit;
      QLabel* label;
    }
    

    first case:

    void MyWidget::setFont(const QFont& newFont)
    {
       lineedit->setFont(newFont);
    }//nothing is displayed
    

    second case:

    void MyWidget::setFont(const QFont& newFont)
    {
       QFont f = label.font();                //storing label font
       QWidget::setFont(font);           //applying new font to the whole widget
       label->setFont(f);                      //applying back its original font to label
    }//label font is set to newFont and not to f
    
    

    third case:

    void MyWidget::setFont(const QFont& newFont)
    {
       QFont f("Times", 8);                   //creating a local variable font
       QWidget::setFont(font);           //applying new font to the whole widget
       label->setFont(f);                      //applying the local font to label
    }//label font is set to  f
    

    this is working in the third case, but I would like to keep the original font of label and not code it in a static way in case the general style of the application change.
    Any idea?

    joeQJ H 2 Replies Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by
      #2

      You overcomplicated the issue a lot. just call lineedit->setStyleSheet("font: bold italic large "Times New Roman");

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      J.HilkJ H 2 Replies Last reply
      2
      • VRoninV VRonin

        You overcomplicated the issue a lot. just call lineedit->setStyleSheet("font: bold italic large "Times New Roman");

        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #3

        @VRonin said in Setting font to QLabel failled:

        You overcomplicated the issue a lot. just call lineedit->setStyleSheet("font: bold italic large "Times New Roman");

        I personally am not a fan of setting fonts via stylesheet.

        For example, what if you want an option to change the font size in your app via a QSpinbox, so the elderly can read your texts too :-)

        You have to create a StyleSheet as a QString, insert the new fontsize into it, and apply it to all effected Objects/Widgets.

        Or am I wrong here?


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

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

          Hi and welcome to devnet,

          Just a side note, the setFont method is not virtual so your code is hiding the base class implementation thus you won't have the results you expect.

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

          H 1 Reply Last reply
          3
          • H H_V_

            Hi,
            I have a widget with a QLabel and a QLineEdit and I want to be able to modify the font of the QLineEdit without affecting the QLabel font. So I reimplemented the setFont of the widget. I've first try to only apply the new font to the line edit, but if I don't call the base class implementation (QWidget::setFont()) it bugs and nothing is displayed (neither QLabel, neither QLineEdit).
            So I've change to call the base class implementation in my implementation, which makes both QLineEdit and QLabel font change.
            So I saved the QLabel original font before and reapply it after... It does'nt work neither. But if I specify a static font it works.
            Code exemple:

            class MyWidget: public QWidget
            {
              virtual void setFont(const QFont& font);
            private:
              QLineEdit* lineedit;
              QLabel* label;
            }
            

            first case:

            void MyWidget::setFont(const QFont& newFont)
            {
               lineedit->setFont(newFont);
            }//nothing is displayed
            

            second case:

            void MyWidget::setFont(const QFont& newFont)
            {
               QFont f = label.font();                //storing label font
               QWidget::setFont(font);           //applying new font to the whole widget
               label->setFont(f);                      //applying back its original font to label
            }//label font is set to newFont and not to f
            
            

            third case:

            void MyWidget::setFont(const QFont& newFont)
            {
               QFont f("Times", 8);                   //creating a local variable font
               QWidget::setFont(font);           //applying new font to the whole widget
               label->setFont(f);                      //applying the local font to label
            }//label font is set to  f
            

            this is working in the third case, but I would like to keep the original font of label and not code it in a static way in case the general style of the application change.
            Any idea?

            joeQJ Offline
            joeQJ Offline
            joeQ
            wrote on last edited by
            #5

            @H_V_ Just In case, my customize function name first character is capitalized. like Class::SetFont(...). qt inner function Class::setFont(...);

            Just do it!

            1 Reply Last reply
            0
            • VRoninV VRonin

              You overcomplicated the issue a lot. just call lineedit->setStyleSheet("font: bold italic large "Times New Roman");

              H Offline
              H Offline
              H_V_
              wrote on last edited by
              #6

              @VRonin How can i set a stylesheet that depend on a font that is choose by the user? Because your solution seems a bit static to me...

              VRoninV 1 Reply Last reply
              0
              • SGaistS SGaist

                Hi and welcome to devnet,

                Just a side note, the setFont method is not virtual so your code is hiding the base class implementation thus you won't have the results you expect.

                H Offline
                H Offline
                H_V_
                wrote on last edited by
                #7

                @SGaist I agree, that's why I call the QWidget::setFont

                1 Reply Last reply
                0
                • H H_V_

                  @VRonin How can i set a stylesheet that depend on a font that is choose by the user? Because your solution seems a bit static to me...

                  VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by VRonin
                  #8

                  How can i set a stylesheet that depend on a font that is choose by the user?

                  #include <QStringBuilder>
                      QString fontStyleString(const QFont& fnt){
                          const QString baseStr= QStringLiteral("font-family: \"") % fnt.family()
                                  % QStringLiteral("\";font-weight: ") % (fnt.bold() ? QStringLiteral("bold") : QStringLiteral("normal"))
                                   % QStringLiteral(";font-size: ") % QString::number(fnt.pointSizeF(),'f') % "pt"
                                  % QStringLiteral(";font-style: ");
                          switch (fnt.style()){
                          case QFont::StyleItalic:
                              return baseStr % QStringLiteral("italic");
                          case QFont::StyleOblique:
                              return baseStr % QStringLiteral("oblique");
                          default:
                              return baseStr % QStringLiteral("normal");
                          }
                      }
                  

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  H 1 Reply Last reply
                  3
                  • VRoninV VRonin

                    How can i set a stylesheet that depend on a font that is choose by the user?

                    #include <QStringBuilder>
                        QString fontStyleString(const QFont& fnt){
                            const QString baseStr= QStringLiteral("font-family: \"") % fnt.family()
                                    % QStringLiteral("\";font-weight: ") % (fnt.bold() ? QStringLiteral("bold") : QStringLiteral("normal"))
                                     % QStringLiteral(";font-size: ") % QString::number(fnt.pointSizeF(),'f') % "pt"
                                    % QStringLiteral(";font-style: ");
                            switch (fnt.style()){
                            case QFont::StyleItalic:
                                return baseStr % QStringLiteral("italic");
                            case QFont::StyleOblique:
                                return baseStr % QStringLiteral("oblique");
                            default:
                                return baseStr % QStringLiteral("normal");
                            }
                        }
                    
                    H Offline
                    H Offline
                    H_V_
                    wrote on last edited by
                    #9

                    @VRonin Thanks, it works perfectly.
                    But I'm a bit curious on why my method works with the local variable and not with the stored value. If someone has an explaination I would be grateful...

                    VRoninV 1 Reply Last reply
                    1
                    • H H_V_

                      @VRonin Thanks, it works perfectly.
                      But I'm a bit curious on why my method works with the local variable and not with the stored value. If someone has an explaination I would be grateful...

                      VRoninV Offline
                      VRoninV Offline
                      VRonin
                      wrote on last edited by VRonin
                      #10

                      @H_V_ said in Setting font to QLabel failled:

                      But I'm a bit curious on why my method works with the local variable and not with the stored value. If someone has an explaination I would be grateful...

                      strange indeed. funnily enough this works:

                      const QString f = label->font().toString();                //storing label font
                         QWidget::setFont(font);           //applying new font to the whole widget
                      QFont tmpFont;
                      tmpFont.fromString(f);
                         label->setFont(tmpFont);  
                      

                      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                      ~Napoleon Bonaparte

                      On a crusade to banish setIndexWidget() from the holy land of Qt

                      H 1 Reply Last reply
                      1
                      • H H_V_

                        Hi,
                        I have a widget with a QLabel and a QLineEdit and I want to be able to modify the font of the QLineEdit without affecting the QLabel font. So I reimplemented the setFont of the widget. I've first try to only apply the new font to the line edit, but if I don't call the base class implementation (QWidget::setFont()) it bugs and nothing is displayed (neither QLabel, neither QLineEdit).
                        So I've change to call the base class implementation in my implementation, which makes both QLineEdit and QLabel font change.
                        So I saved the QLabel original font before and reapply it after... It does'nt work neither. But if I specify a static font it works.
                        Code exemple:

                        class MyWidget: public QWidget
                        {
                          virtual void setFont(const QFont& font);
                        private:
                          QLineEdit* lineedit;
                          QLabel* label;
                        }
                        

                        first case:

                        void MyWidget::setFont(const QFont& newFont)
                        {
                           lineedit->setFont(newFont);
                        }//nothing is displayed
                        

                        second case:

                        void MyWidget::setFont(const QFont& newFont)
                        {
                           QFont f = label.font();                //storing label font
                           QWidget::setFont(font);           //applying new font to the whole widget
                           label->setFont(f);                      //applying back its original font to label
                        }//label font is set to newFont and not to f
                        
                        

                        third case:

                        void MyWidget::setFont(const QFont& newFont)
                        {
                           QFont f("Times", 8);                   //creating a local variable font
                           QWidget::setFont(font);           //applying new font to the whole widget
                           label->setFont(f);                      //applying the local font to label
                        }//label font is set to  f
                        

                        this is working in the third case, but I would like to keep the original font of label and not code it in a static way in case the general style of the application change.
                        Any idea?

                        H Offline
                        H Offline
                        H_V_
                        wrote on last edited by
                        #11

                        Ok, I'm so sorry guys, I think I was clearly not awake enough.
                        After more investigation, it appears that the first described case works perfectly when you don't forget to clean your project :-s :

                        void MyWidget::setFont(const QFont& newFont)
                        {
                        lineedit->setFont(newFont);
                        }

                        So sorry for wasting your time and thanks a lot for all your replies

                        1 Reply Last reply
                        0
                        • VRoninV VRonin

                          @H_V_ said in Setting font to QLabel failled:

                          But I'm a bit curious on why my method works with the local variable and not with the stored value. If someone has an explaination I would be grateful...

                          strange indeed. funnily enough this works:

                          const QString f = label->font().toString();                //storing label font
                             QWidget::setFont(font);           //applying new font to the whole widget
                          QFont tmpFont;
                          tmpFont.fromString(f);
                             label->setFont(tmpFont);  
                          
                          H Offline
                          H Offline
                          H_V_
                          wrote on last edited by
                          #12

                          @VRonin said in Setting font to QLabel failled:

                          @H_V_ said in Setting font to QLabel failled:

                          But I'm a bit curious on why my method works with the local variable and not with the stored value. If someone has an explaination I would be grateful...

                          strange indeed. funnily enough this works:

                          const QString f = label->font().toString();                //storing label font
                             QWidget::setFont(font);           //applying new font to the whole widget
                          QFont tmpFont;
                          tmpFont.fromString(f);
                             label->setFont(tmpFont);  
                          

                          Despite I found the solution, I'm still curious about that strange behavior (that appears even stranger after your post)... Have you found any explaination?

                          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