Заголовки QTabBar и стилевое оформление в QProxyStyle


Столкнулся с необходимостью создать на форме TabWidget вкладки которых должны быть по вертикали, но с заголовками по горизонтали.

введите сюда описание изображения

Реализовал при помощи QProxyStyle


    class CustomTabProxyStyle : public QProxyStyle {
    public:
      virtual QSize sizeFromContents(QStyle::ContentsType ctype, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const override
      {
          QSize s = QProxyStyle::sizeFromContents(ctype, option, contentsSize, widget);
          if (ctype == QStyle::CT_TabBarTab){
              s.transpose();
          }
          return s;
      }
      virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override
      {
          if (element == CE_TabBarTabLabel) {
              if (const QStyleOptionTab* 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);
      }
    };

... добавление вкладок

    QTabWidget* theTabWidget = new QTabWidget();
    theTabWidget->tabBar()->setStyle(new CustomTabProxyStyle());
    for (int i = 0; i < 5; ++i)
        theTabWidget->addTab(new QWidget(), QString("Tab %1").arg(i + 1));
    theTabWidget->setTabPosition(QTabWidget::West);   
    this->layout()->addWidget(theTabWidget);

... но возникла проблема.
Суть проблемы заключается в том, что при загрузке приложения устанавливается стиль в main.cpp

    a.setStyleSheet(QString(""
                  "/* --------------------- QTabBar --------------------- */"
                  "QTabBar::tab"
                  "{"
                  "background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);"
                  "border: 2px solid #C4C4C3;" //1px inset gray;
                  "border-bottom-color: #C2C7CB;"
                  "border-top-left-radius: 5px; "
                  "border-top-right-radius: 5px; "
                  "min-width: 10ex; "
                  "padding-top: 1px;"
                  "padding-right: 8px;"
                  "padding-left: 8px;"
                  "padding-bottom: 1px;"
                  "}"));

Заголовки вкладок устанавливаются по горизонтали только в том случае если код вышеуказанного стиля закомментирован .

Подскажите как быть в данной ситуации ?


Ответы (0 шт):