[Solved] Using variables in style sheets qss



  • Is there anyway that we can define a hex/rgb numbers to a variable and use them in our stylesheet(.qss) file . For eg

    @myColor = #DFDFE0
    QPushButton { background-color: myColor; }@

    This is required as there are many components in .qss file where i need to use the same hex value for color. So I was thinking that at the top of the stylesheet file i can define all the variable and use them as required. Also if i need to change the color then i have to change at one place and that will be reflected for all the components.

    Thanks



  • I dont think stylesheets have support for that.
    you can group rules together, not sure about the exact syntax

    QPushButton QLabel QWidget { background-color: #DFDFE0 }



  • You can use a text template for the style sheet, create the actual stylesheet as a combination of the template and a theme and set it. See Grantlee for string templating. I did something similar, used just basic string replacement and it works fine.



  • @miroslav

    Can you give some examples about how can i use this in stylesheets(.qss) file , that will be really helpful. I have gone through the "documentation":http://www.grantlee.org/apidox/for_themers.html but couldn't understand much about how to use it.

    Thanks for your time.



  • I'd suggest looking at the book example or the unit tests in the grantlee repository. I think the books example is the most complete small example.



  • [quote author="stephen" date="1338905990"]I'd suggest looking at the book example or the unit tests in the grantlee repository. I think the books example is the most complete small example.[/quote]

    Thanks, Stephen!



  • can you post i little code example using it in a qt application because i need it to



  • I am trying to run the book example provided in "Grantlee repository":http://gitorious.org/grantlee.
    Dont know where i am going wrong, whenever i run the project i get the following errors

    @13:52:01: Running build steps for project books...
    13:52:01: Configuration unchanged, skipping qmake step.
    13:52:01: Starting: "C:\QtSDK\QtCreator\bin\jom.exe"
    c:\qtsdk\desktop\qt\4.8.0\msvc2010\bin\qmake.exe -spec ......\QtSDK\Desktop\Qt\4.8.0\msvc2010\mkspecs\win32-msvc2010 CONFIG+=declarative_debug -o Makefile ..\books\books.pro
    C:\QtSDK\QtCreator\bin\jom.exe -nologo -j 4 -f Makefile.Debug

    jom 1.0.6 - empower your cores

    Error: dependent 'debug\bookwindow.moc' does not exist.
    command failed with exit code 2
    13:52:02: The process "C:\QtSDK\QtCreator\bin\jom.exe" exited with code 2.
    Error while building project books (target: Desktop)
    When executing build step 'Make'@

    What steps should i follow to make this working.
    Thanks.



  • I tried but still couldn't get this working.



  • You do not need a full-blown template library just to replace some text. If this fits your needs doing a simple QString::replace() does the trick as well.

    @
    QPushButton { background-color: myColor; }

    QString styleSheet = ...;
    styleSheet.replace("myColor", "#DFDFE0");
    styleSheet.replace(...);
    @

    See also "this":http://qt-project.org/forums/viewthread/18686/ thread.



  • [quote author="pritamghanghas" date="1338889298"]I dont think stylesheets have support for that.
    you can group rules together, not sure about the exact syntax

    QPushButton QLabel QWidget { background-color: #DFDFE0 }[/quote]
    I just want to mention that this does not do what you expect it to do.

    If you want to group several selectors you will have to use commas. <code>QPushButton, QLabel, QWidget { background-color: #DFDFE0 }</code>

    Without commas, you are doing a descendant selection.



  • Thanks for the help,

    For the implementation we created a parser that would parse the css file with the user defined variable and replace the variable with the actual color code.

    Regards
    Soumitra.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.