Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Setting QProxyStyle on TabBar, overrides Palette
Qt 6.12 LTS is out! See what's new in the release blog

Setting QProxyStyle on TabBar, overrides Palette

Scheduled Pinned Locked Moved Unsolved General and Desktop
tabbarpalettesetstyle
12 Posts 2 Posters 5.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi,

    @BDC_Patrick said in Setting QProxyStyle on TabBar, overrides Palette:

    drawControl

    Does it draw properly if you do not re-implement that method ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    BDC_PatrickB 1 Reply Last reply
    1
    • SGaistS SGaist

      Hi,

      @BDC_Patrick said in Setting QProxyStyle on TabBar, overrides Palette:

      drawControl

      Does it draw properly if you do not re-implement that method ?

      BDC_PatrickB Offline
      BDC_PatrickB Offline
      BDC_Patrick
      wrote on last edited by BDC_Patrick
      #3

      @SGaist Yes
      The Tabs are drawn Properly, when not doing the QProxyStyle.
      But.. vertical Text..

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #4

        I did not meant to disable the style, just not override drawControl.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        BDC_PatrickB 1 Reply Last reply
        1
        • SGaistS SGaist

          I did not meant to disable the style, just not override drawControl.

          BDC_PatrickB Offline
          BDC_PatrickB Offline
          BDC_Patrick
          wrote on last edited by BDC_Patrick
          #5

          @SGaist But.. the rotation of the TabBar Labels is done in drawControl...
          Without it, the Labels are vertical again.. But still white Light-Fusion color Palette..

          I updated the Startpost with an Image of the problem..

          1 Reply Last reply
          0
          • BDC_PatrickB Offline
            BDC_PatrickB Offline
            BDC_Patrick
            wrote on last edited by
            #6

            I do still stuck on that Task..
            :(

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #7

              Which version of Qt are you using ?
              On which OS ?
              Are you using a specific style like fusion ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              BDC_PatrickB 1 Reply Last reply
              0
              • SGaistS SGaist

                Which version of Qt are you using ?
                On which OS ?
                Are you using a specific style like fusion ?

                BDC_PatrickB Offline
                BDC_PatrickB Offline
                BDC_Patrick
                wrote on last edited by BDC_Patrick
                #8

                @SGaist
                Current QT is 5.15.2
                OS is Windows
                Preferred Style is fusion with changing Palettes
                Language is Cpp (11+)
                IDE: CLion

                I´m currently working with the workaround, to spawn multiple buttons in a vertical Box..
                Not really beautiful..

                So.. if you know help for a TabBar.. it would be nice ^^

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  Can you provide a complete minimal example that triggers that behavior ? That way everybody can use the same code to see the issue.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  BDC_PatrickB 1 Reply Last reply
                  1
                  • BDC_PatrickB Offline
                    BDC_PatrickB Offline
                    BDC_Patrick
                    wrote on last edited by BDC_Patrick
                    #10
                    This post is deleted!
                    1 Reply Last reply
                    0
                    • SGaistS SGaist

                      Can you provide a complete minimal example that triggers that behavior ? That way everybody can use the same code to see the issue.

                      BDC_PatrickB Offline
                      BDC_PatrickB Offline
                      BDC_Patrick
                      wrote on last edited by
                      #11

                      @SGaist said in Setting QProxyStyle on TabBar, overrides Palette:

                      Can you provide a complete minimal example that triggers that behavior ? That way everybody can use the same code to see the issue.

                      The ui file:

                      <?xml version="1.0" encoding="UTF-8"?>
                      <ui version="4.0">
                       <class>test_verticalTabBar</class>
                       <widget class="QWidget" name="test_verticalTabBar">
                        <property name="geometry">
                         <rect>
                          <x>0</x>
                          <y>0</y>
                          <width>819</width>
                          <height>605</height>
                         </rect>
                        </property>
                        <property name="windowTitle">
                         <string>test_verticalTabBar</string>
                        </property>
                        <layout class="QGridLayout" name="gridLayout">
                         <item row="0" column="0">
                          <widget class="QTabWidget" name="tabWidget">
                           <property name="tabPosition">
                            <enum>QTabWidget::West</enum>
                           </property>
                           <property name="currentIndex">
                            <number>0</number>
                           </property>
                           <widget class="QWidget" name="tab">
                            <attribute name="title">
                             <string>Tab 1</string>
                            </attribute>
                           </widget>
                           <widget class="QWidget" name="tab_2">
                            <attribute name="title">
                             <string>Tab 2</string>
                            </attribute>
                           </widget>
                           <widget class="QWidget" name="tab_3">
                            <attribute name="title">
                             <string>Seite</string>
                            </attribute>
                           </widget>
                           <widget class="QWidget" name="tab_4">
                            <attribute name="title">
                             <string>Seite</string>
                            </attribute>
                           </widget>
                           <widget class="QWidget" name="tab_5">
                            <attribute name="title">
                             <string>Seite</string>
                            </attribute>
                           </widget>
                          </widget>
                         </item>
                        </layout>
                       </widget>
                       <resources/>
                       <connections/>
                      </ui>
                      
                      

                      the Header File:

                      #ifndef TEST_VERTICALTABBAR_H
                      #define TEST_VERTICALTABBAR_H
                      
                      #include <QWidget>
                      #include "tgs_customtabwest.h"
                      
                      
                      QT_BEGIN_NAMESPACE
                      namespace Ui { class test_verticalTabBar; }
                      QT_END_NAMESPACE
                      
                      class test_verticalTabBar : public QWidget {
                      Q_OBJECT
                      
                      public:
                          explicit test_verticalTabBar(QWidget *parent = nullptr);
                      
                          ~test_verticalTabBar() override;
                      
                      private:
                          Ui::test_verticalTabBar *ui;
                      };
                      
                      
                      #endif //TEST_VERTICALTABBAR_H
                      
                      

                      The Source File:

                      #include "test_verticaltabbar.h"
                      #include "ui_test_verticalTabBar.h"
                      
                      
                      test_verticalTabBar::test_verticalTabBar(QWidget *parent) :
                              QWidget(parent), ui(new Ui::test_verticalTabBar) {
                          ui->setupUi(this);
                      
                          ui->tabWidget->tabBar()->setStyle(new TGS_CustomTabWest);
                      }
                      
                      test_verticalTabBar::~test_verticalTabBar() {
                          delete ui;
                      }
                      

                      Style set via (in main.cpp):

                      a.setStyle(QStyleFactory::create("Fusion"));
                      

                      My darkstyle palette (feel free to use it, too):

                      void SetupDarkPalette(QPalette &palette, int highlighter, int ColorShifter){
                          QColor hLColor;
                          switch(highlighter){
                              case 0:
                                  hLColor = QColor(42,130,218); //Blue
                                  break;
                              case 1:
                                  hLColor = QColor(255,150,30); //Orange
                                  break;
                              case 2:
                                  hLColor = QColor(145,215,0); //Green
                                  break;
                              case 3:
                                  hLColor = QColor(225,225,0); //Yellow
                                  break;
                              case 4:
                                  hLColor = QColor(175,90,255); //Purple
                                  break;
                              case 5:
                                  hLColor = QColor(215,45,0); //Red
                                  break;
                              case 6:
                                  hLColor = QColor(215,215,215); //White
                                  break;
                              case 7:
                                  hLColor = QColor(115,115,115); //Grey
                                  break;
                              case 8:
                                  hLColor = QColor(20,20,20); //Black
                                  break;
                              default:
                                  break;
                          }
                      
                          // modify palette to dark
                          palette.setColor(QPalette::Window, QColor(53 + ColorShifter, 53 + ColorShifter, 53 + ColorShifter));
                          palette.setColor(QPalette::WindowText, Qt::white);
                          palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127 + ColorShifter, 127 + ColorShifter, 127 + ColorShifter));
                          palette.setColor(QPalette::Base, QColor(42 + ColorShifter, 42 + ColorShifter, 42 + ColorShifter));
                          palette.setColor(QPalette::AlternateBase, QColor(66 + ColorShifter, 66 + ColorShifter, 66 + ColorShifter));
                          palette.setColor(QPalette::ToolTipBase, Qt::white);
                          palette.setColor(QPalette::ToolTipText, QColor(53 + ColorShifter, 53 + ColorShifter, 53 + ColorShifter));
                          palette.setColor(QPalette::Text, Qt::white);
                          palette.setColor(QPalette::Disabled, QPalette::Text, QColor(127 + ColorShifter, 127 + ColorShifter, 127 + ColorShifter));
                          palette.setColor(QPalette::Dark, QColor(35 + ColorShifter, 35 + ColorShifter, 35 + ColorShifter));
                          palette.setColor(QPalette::Shadow, QColor(20 + ColorShifter, 20 + ColorShifter, 20 + ColorShifter));
                          palette.setColor(QPalette::Button, QColor(53 + ColorShifter, 53 + ColorShifter, 53 + ColorShifter));
                          palette.setColor(QPalette::ButtonText, Qt::white);
                          palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127 + ColorShifter, 127 + ColorShifter, 127 + ColorShifter));
                          palette.setColor(QPalette::BrightText, Qt::red);
                          palette.setColor(QPalette::Link, QColor(42 + ColorShifter, 130 + ColorShifter, 218 + ColorShifter));
                          palette.setColor(QPalette::Highlight, hLColor);
                          palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(80 + ColorShifter, 80 + ColorShifter, 80 + ColorShifter));
                          palette.setColor(QPalette::HighlightedText, QColor(255,255,255);
                          palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(127 + ColorShifter, 127 + ColorShifter, 127 + ColorShifter));
                      
                          backdropColor = QColor(53 + ColorShifter, 53 + ColorShifter, 53 + ColorShifter);
                      }
                      

                      And the tgs_customtabwest.h:

                      #ifndef TGS_CUSTOMTABWEST_H
                      #define TGS_CUSTOMTABWEST_H
                      
                      #include <QApplication>
                      #include <QStyleOptionTab>
                      #include <QStylePainter>
                      #include <QProxyStyle>
                      #include <QTabBar>
                      #include <QTabWidget>
                      
                      class TGS_CustomTabWest: public QProxyStyle {
                      public:
                          QSize sizeFromContents(ContentsType type, const QStyleOption* option,
                                                 const QSize& size, const QWidget* widget) const override {
                              QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
                              if (type == QStyle::CT_TabBarTab) {
                                  s.transpose();
                              }
                              return s;
                          }
                      
                          void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const override {
                              if (element == CE_TabBarTabLabel) {
                                  if (const auto* tab = qstyleoption_cast<const QStyleOptionTab*>(option)) {
                                      QStyleOptionTab opt(*tab);
                                      opt.shape = QTabBar::RoundedNorth;
                                      QProxyStyle::drawControl(element, &opt, painter, widget);
                                      return;
                                  }
                              }
                              QProxyStyle::drawControl(element, option, painter, widget);
                          }
                      };
                      
                      #endif //TGS_CUSTOMTABWEST_H
                      

                      Calling the Widget inside my MainWindow, results in:
                      Unbenannt.jpg

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        Looks likes there might be a bug that has crept in. I have a related but different issue with the macOS style.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt
                        • Unsolved