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. Using Qt private CSS parser
QtWS25 Last Chance

Using Qt private CSS parser

Scheduled Pinned Locked Moved Solved General and Desktop
cssparserqcssparserqt5
12 Posts 4 Posters 2.7k Views
  • 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.
  • IMAN4KI Offline
    IMAN4KI Offline
    IMAN4K
    wrote on last edited by
    #1

    Hi dear devs.
    we have custom widget RadioButton :
    RadioButton.h

    class RadioButton : public QAbstractButton
    {
    public:
        RadioButton();
    };
    

    And a css file that contain RadioButton style properties:
    Style.css

    RadioButton {
        color:#009688;
        font-size:12pt;
        opacity:0.5;
    }
    

    Now i'm going to retrieve RadioButton's properties from Style.css
    for that after some searching i found Qt private CSS scanner and parser :
    qcssscanner.cpp
    qcssparser_p.h
    qcssparser.cpp

    And now i don't know how to use this parser to get token types + values

    int main() {
        QString css = "RadioButton {"
                        "color:#009688;"
                        "font-size:12pt;"
                        "opacity:0.5;"
                        "}";
        QCss::Parser parser(css);
    }
    

    Regards.

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

      Hi,

      You would have to enable the use of the private parts of Qt with all the big fat warnings that comes with it.

      Why do you want to parse your css since you already know what's in it ?

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

      IMAN4KI 1 Reply Last reply
      2
      • SGaistS SGaist

        Hi,

        You would have to enable the use of the private parts of Qt with all the big fat warnings that comes with it.

        Why do you want to parse your css since you already know what's in it ?

        IMAN4KI Offline
        IMAN4KI Offline
        IMAN4K
        wrote on last edited by
        #3

        @SGaist

        You would have to enable the use of the private parts of Qt with all the big fat warnings that comes with it.

        I already compile it (and also disable warnings) :

        int main() {
            QString css = "RadioButton {"
                            "color:#009688;"
                            "font-size:12pt;"
                            "opacity:0.5;"
                            "}";
            QCss::Parser parser(css);
        }
        

        But at this time i want to get the color value (#009688) of RadioButton but the source code of this parser is complicated (may be i should make the parse tree)

        Why do you want to parse your css since you already know what's in it ?

        Because i want to read an external CSS file and get my app's widgets properties from it.
        For example : in my RadioButton painting i use an opacity value and when i change the opacity from CSS file all RadioButton must be change to new opacity.

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

          Then why not just set that external style sheet directly ?

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

          IMAN4KI 1 Reply Last reply
          2
          • SGaistS SGaist

            Then why not just set that external style sheet directly ?

            IMAN4KI Offline
            IMAN4KI Offline
            IMAN4K
            wrote on last edited by
            #5

            @SGaist
            Well.
            We assigned stylesheet :

            class RadioButton : public QAbstractButton
            {
            public:
            	RadioButton() {
            		QString css = "RadioButton {"
            							"color:#009688;"
            							"font-size:12pt;"
            							"opacity:0.5;"
            							"}";
            		setStyleSheet(css);
            	}
            };
            

            But the problem is accessing the values So how we should get opacity :
            QPainter::setOpacity(/* required opacity */);

            kshegunovK 1 Reply Last reply
            0
            • IMAN4KI IMAN4K

              @SGaist
              Well.
              We assigned stylesheet :

              class RadioButton : public QAbstractButton
              {
              public:
              	RadioButton() {
              		QString css = "RadioButton {"
              							"color:#009688;"
              							"font-size:12pt;"
              							"opacity:0.5;"
              							"}";
              		setStyleSheet(css);
              	}
              };
              

              But the problem is accessing the values So how we should get opacity :
              QPainter::setOpacity(/* required opacity */);

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

              @IMAN4K

              Isn't the windowOpacity property holding that?

              Read and abide by the Qt Code of Conduct

              IMAN4KI 1 Reply Last reply
              0
              • kshegunovK kshegunov

                @IMAN4K

                Isn't the windowOpacity property holding that?

                IMAN4KI Offline
                IMAN4KI Offline
                IMAN4K
                wrote on last edited by IMAN4K
                #7

                @kshegunov
                No. it return 1

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

                  Are you doing all the painting yourself ?

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

                  IMAN4KI 1 Reply Last reply
                  1
                  • SGaistS SGaist

                    Are you doing all the painting yourself ?

                    IMAN4KI Offline
                    IMAN4KI Offline
                    IMAN4K
                    wrote on last edited by
                    #9

                    @SGaist
                    yes

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

                      What attributes are you going to support ?

                      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
                      1
                      • IMAN4KI IMAN4K

                        @SGaist
                        yes

                        D Offline
                        D Offline
                        Devopia53
                        wrote on last edited by
                        #11

                        @IMAN4K said:

                        Now i'm going to retrieve RadioButton's properties from Style.css
                        for that after some searching i found Qt private CSS scanner and parser :
                        qcssscanner.cpp
                        qcssparser_p.h
                        qcssparser.cpp

                        And now i don't know how to use this parser to get token types + values

                        Hi.

                        Something like this... Not recommended...

                        #include <QtGui/5.7.0/QtGui/private/qcssparser_p.h>
                        
                        [...]
                        QCss::Parser parser(yourStyleSheetString);
                        
                        while (parser.testSelector()) {
                            QCss::StyleRule styleRule;
                        
                            if (parser.parseRuleset(&styleRule)) {
                                foreach (auto sel, styleRule.selectors) {
                                    foreach (auto bSel, sel.basicSelectors) {
                                        qDebug() << "BasicSelector:" << bSel.elementName;
                                    }
                                }
                        
                                foreach (auto decl, styleRule.declarations) {
                                    qDebug() << "property:" << decl.d->property;
                                    foreach (auto value, decl.d->values) {
                                       qDebug() << "value:" << value.variant;
                                    }
                                }
                            }
                        }
                        [...]
                        
                        IMAN4KI 1 Reply Last reply
                        2
                        • D Devopia53

                          @IMAN4K said:

                          Now i'm going to retrieve RadioButton's properties from Style.css
                          for that after some searching i found Qt private CSS scanner and parser :
                          qcssscanner.cpp
                          qcssparser_p.h
                          qcssparser.cpp

                          And now i don't know how to use this parser to get token types + values

                          Hi.

                          Something like this... Not recommended...

                          #include <QtGui/5.7.0/QtGui/private/qcssparser_p.h>
                          
                          [...]
                          QCss::Parser parser(yourStyleSheetString);
                          
                          while (parser.testSelector()) {
                              QCss::StyleRule styleRule;
                          
                              if (parser.parseRuleset(&styleRule)) {
                                  foreach (auto sel, styleRule.selectors) {
                                      foreach (auto bSel, sel.basicSelectors) {
                                          qDebug() << "BasicSelector:" << bSel.elementName;
                                      }
                                  }
                          
                                  foreach (auto decl, styleRule.declarations) {
                                      qDebug() << "property:" << decl.d->property;
                                      foreach (auto value, decl.d->values) {
                                         qDebug() << "value:" << value.variant;
                                      }
                                  }
                              }
                          }
                          [...]
                          
                          IMAN4KI Offline
                          IMAN4KI Offline
                          IMAN4K
                          wrote on last edited by IMAN4K
                          #12

                          @Devopia53
                          Excellent answer :)

                          Not recommended...

                          Yeah know it and i make these files local in my project (not include from <private/qcssparser_p.h>):
                          qcssscanner.cpp
                          qcssparser_p.h
                          qcssparser.cpp

                          Thank you

                          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