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:
Le résultat final est montré dans l’image suivante:
L’exemple complet peut être trouvé dans le lien suivant