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é
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;
  }
}
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
MyWidget
{
    background-color: blue;
}
 
MyWidget[selected='true']
{
    background-color: blue;
    border: 1px solid red;
}
et enfin mon main
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();
}
Je n'arrive pas à voir pourquoi cela ne fonctionne pas...

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.