Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Setting QProxyStyle on TabBar, overrides Palette
Forum Updated to NodeBB v4.3 + New Features

Setting QProxyStyle on TabBar, overrides Palette

Scheduled Pinned Locked Moved Unsolved General and Desktop
tabbarpalettesetstyle
12 Posts 2 Posters 2.0k 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 Extensions
                        • Unsolved