Qt TabWidget Chaque onglet Titre Couleur de fond

Ceci est le Tabwidget original sans définir la couleur d’arrière-plan du titre

Mon client me demande de faire quelque chose comme ça; Définir une couleur de fond différente pour le titre

All - Yellow purchase - light blue POS Sales - light green Cash Sales - Pink invoice - light purple 

J’ai essayé le SetStyleSheet comme:

  QTabBar { background-color : Yellow; } 

Mais tous les tabs ont changé de couleur Quelqu’un sait comment régler chaque couleur d’arrière-plan QTabBar?

Ces propriétés ne peuvent pas être définies via QSS. Pour changer le style de chaque onglet, nous devons créer un QTabBar personnalisé et en substituer la méthode paintEvent . Pour pouvoir changer le style de chaque onglet, nous utilisons la classe QStyleOptionTab est privé, vous devez donc créer un QTabWidget personnalisé comme indiqué ci-dessous:

tabwidget.h

 #ifndef TABWIDGET_H #define TABWIDGET_H #include  #include  #include  class TabBar: public QTabBar { public: TabBar(const QHash &colors, QWidget *parent=0):QTabBar(parent){ mColors = colors; } protected: void paintEvent(QPaintEvent */*event*/){ QStylePainter painter(this); QStyleOptionTab opt; for(int i = 0;i < count();i++) { initStyleOption(&opt,i); if(mColors.contains(opt.text)){ opt.palette.setColor(QPalette::Button, mColors[opt.text]); } painter.drawControl(QStyle::CE_TabBarTabShape, opt); painter.drawControl(QStyle::CE_TabBarTabLabel,opt); } } private: QHash mColors; }; class TabWidget : public QTabWidget { public: TabWidget(QWidget *parent=0):QTabWidget(parent){ // text - color QHash  dict; dict["All"] = QColor("yellow"); dict["purchase"] = QColor("#87ceeb"); dict["POS Sales"] = QColor("#90EE90"); dict["Cash Sales"] = QColor("pink"); dict["invoice"] = QColor("#800080"); setTabBar(new TabBar(dict)); } }; #endif // TABWIDGET_H 

Et pour l’utiliser dans notre QTabWidget dans Qt Designer, il faut faire un clic droit sur le tabwidget et sélectionner le menu Promoted Widgets. Dans mon cas, le code précédent est créé dans le fichier tabwidget.h. Dans le cas de Nom de classe sponsorisée, nous utilisons TabWidget, après quoi nous avons appuyé sur les boutons Ajouter et Promouvoir pour obtenir ce qui est montré dans l’image suivante:

entrez la description de l'image ici

Le résultat final est montré dans l’image suivante:

entrez la description de l'image ici

L’exemple complet peut être trouvé dans le lien suivant