您现在的位置是:首页 > 技术文章网站首页技术文章

[Qt]Tab Widget 横向字体实现

  • WangYe
  • 2020-09-20 15:45:43
  • 258 次阅读
Qt中的Tab Widget,tabPosition 改为 West 后 字体竖着显示改为横着显示方法

UI布局Demo:

1600587484238276.png

样式文件如下:

Tabstyle.h

#ifndef CUSTOMTABSTYLE_H
#define CUSTOMTABSTYLE_H

#include <QPainter>
#include <QProxyStyle>
#include <QStyleOptionTab>

class CustomTabStyle : public QProxyStyle
{
public:
   CustomTabStyle();

   QSize sizeFromContents(ContentsType type,
                          const QStyleOption *option,
                          const QSize &size,
                          const QWidget *widget) const;
   void drawControl(ControlElement element,
                    const QStyleOption *option,
                    QPainter *painter,
                    const QWidget *widget) const;
};

#endif // CUSTOMTABSTYLE_H

Tabstyle.cpp

#include "Tabstyle.h"

CustomTabStyle::CustomTabStyle()
{

}

QSize CustomTabStyle::sizeFromContents(ContentsType type,
                                      const QStyleOption *option,
                                      const QSize &size,
                                      const QWidget *widget) const
{
   QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
   if(type == QStyle::CT_TabBarTab)
   {
       s.transpose();

       s.rwidth() = 105;
       s.rheight() = 40;
   }

   return s;
}

void CustomTabStyle::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))
       {
           QTextOption option;
           option.setAlignment(Qt::AlignCenter);
           QPen pen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
           painter->setPen(pen);

           painter->drawText(tab->rect, tab->text, option);


           return;
       }
   }

   QProxyStyle::drawControl(element, option, painter, widget);
}

调用Tabstyle.h头文件到 QTabWidget 所在cpp文件:

ui->confTabWidget->tabBar()->setStyle(new CustomTabStyle);    //加载样式 confTabWidget 为控件名称

1600587838238289.png

效果如下:

1600587905349956.png

文章评论 (0)



Top