我正在使用以下标签样式来水平绘制标签栏文本
东标签位置。只要我不设置任何空白,就可以绘制文本
QTabBar::tab。在这种情况下,文本方向保持垂直,并带有奇怪的偏移量。

class TabStyle : public QProxyStyle {
public:
  explicit TabStyle(Qt::Orientation orientation, QStyle *baseStyle = 0)
      : QProxyStyle(baseStyle), mOrientation(orientation) {}
  void drawControl(ControlElement element, const QStyleOption *option,
                   QPainter *painter, const QWidget *widget) const {
    if (element == CE_TabBarTabLabel) {
      if (const QStyleOptionTab *tab =
              qstyleoption_cast<const QStyleOptionTab *>(option)) {
        QStyleOptionTab opt(*tab);
        opt.shape = QTabBar::RoundedNorth;
        return QProxyStyle::drawControl(element, &opt, painter, widget);
      }
    }
    QProxyStyle::drawControl(element, option, painter, widget);
  }

private:
  const Qt::Orientation mOrientation;
};

class TabWidget : public QTabWidget {
public:
  explicit TabWidget(QWidget *parent = 0,
                     Qt::Orientation orientation = Qt::Horizontal)
      : QTabWidget(parent) {
    QTabBar *tabBar = new QTabBar;
    tabBar->setStyle(new TabStyle(orientation));
    setTabBar(tabBar);
  }
};

最佳答案

为什么不使用Qt样式表?在设计器中,您可以即时检查它,而无需为此编写任何代码。

关于c++ - qtqtabbar的qt自定义qstyle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29835759/

10-15 01:08