Bonjour tout le monde,
Je débute avec les feuilles de style dans Qt. Pour le moment, j'ai décidé de créer une unique feuille de style au niveau de la QApplication.
Ça fonctionne relativement bien jusqu'à présent (même avec mes widgets personnalisés).
Cependant, maintenant, je voudrais changer la couleur de la bordure d'un de mes widgets en fonction d'une de mes propriétés (selection d'un widget). J'ai pensé à utiliser le ":focus" mais cette "propriété" (je ne suis pas sûr du terme) ne sélectionne qu'un widget à la fois (normal).
Après de nombreuses recherches, je n'arrive toujours pas à colorier cette bordure.
Voici comment je procède:
Mon widget avec la propriété
Ma feuille de style (stylesheet.qss)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class MyWidget : public QWidget { Q_OBJECT Q_PROPERTY(bool selected READ isSelected WRITE setSelected) public: //... constructeur and co bool isSelected() const { return m_selected;} void setSelected(bool selected) { if (m_selected != selected) { m_selected = selected; setProperty("selected", m_selected); style()->unpolish(this); style()->polish(this); } private: bool m_selected; } }
et enfin mon main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 MyWidget { background-color: blue; } MyWidget[selected='true'] { background-color: blue; border: 1px solid red; }
Je n'arrive pas à voir pourquoi cela ne fonctionne pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int main(int argc, char *argv[]) { QApplication a(argc, argv); QFile file(":/stylesheet.qss"); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { a.setStyleSheet(file.readAll()); file.close(); } MainWindow w; w.show(); return a.exec(); }
Si quelqu'un a une idée, n'hésitez pas.
Merci d'avance
Edit:
Après de nombreuses minutes de recherches, je viens d'apercevoir mon erreur: dans mon widget, il y a des enfants placer dans un layout avec des marges de 0.... donc l'affichage ne se voyait pas.
Partager