Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt Stylesheet syntax: targeting a specific button, not ALL buttons

I have a window with two buttons.

I'd like to decorate each one with a different stylesheet. They both have different object names, of course, but it seems that only the generic QPushButton stylesheet selector works.

I tried:

QPushButton#myBtnObjectName1 {

/* style definitions */

}
QPushButton#myBtnObjectName2 {

/* style definitions */

}

Tried the same with replacing the # with a ., or having the #myBtnObjetNameX only. Nothing works. Just:

QPushButton {
/* style definitions */
}

Am I using a wrong syntax? Or is this simply impossible without deriving from QPushButton in code and using a separate class name for each?

like image 676
JasonGenX Avatar asked Feb 07 '11 18:02

JasonGenX


3 Answers

You can use "accessibleName" in Qt Designer for this. And in qss stylesheet:

more universal:

[accessibleName="alert-error"] {
    color: red;
}

or be more specific:

QPushButton[accessibleName="bigred"] {
   background-color: red;
}
like image 89
Lukas Avatar answered Nov 16 '22 15:11

Lukas


To match instances using the objectName, you can also use the selector ^=. According to the standard:

[att^=val] Represents an element with the att attribute whose value begins with the prefix "val".

Example in Qt:

QPushButton[objectName^="push"] { background-color: red; }

A QPushButton called pushButton would be matched, but not an object called pbt.

like image 9
Tarod Avatar answered Nov 16 '22 13:11

Tarod


Ah yes, the "AccessibleName" in Qt Designer needs to be set too, not just "ObjectName"

like image 3
JasonGenX Avatar answered Nov 16 '22 13:11

JasonGenX