#include "ctai_tabbar.h" ctai_tabbar::ctai_tabbar() { // 设置图标与文字间距 setIconSize(QSize(20, 20)); } ctai_tabbar::~ctai_tabbar() { } QSize ctai_tabbar::tabSizeHint(int index) const { QSize size = QTabBar::tabSizeHint(index); return QSize(size.width() + 60, size.height()-30); // 扩大标签尺寸 } void ctai_tabbar::paintEvent(QPaintEvent *event) { //创建一个QStylePainter对象painter,用于绘制此小部件的样式元素 QStylePainter painter(this); //创建一个QStyleOptionTab对象opt,用于指定绘制选项 QStyleOptionTab opt; //遍历所有选项卡 for(int i = 0;i < count();i++) { //用索引i初始化opt对象的样式选项 initStyleOption(&opt,i); //指示绘图器使用opt中指定的样式来绘制选项卡的形状 painter.drawControl(QStyle::CE_TabBarTabShape, opt); //保存当前绘图器的状态 painter.save(); //从opt对象中获取选项卡的大小 QSize s = opt.rect.size(); //转置大小s s.transpose(); //创建一个矩形r,其左上角在原点,大小为s QRect r(QPoint(), s); //将矩形r的中心移动到原始选项卡矩形的中心 r.moveCenter(opt.rect.center()); //将opt对象中的矩形更新为新位置 opt.rect = r; //计算索引i处选项卡的中心点c QPoint c = tabRect(i).center(); //将绘图器平移到中心点c painter.translate(c); //将绘图器旋转90度 painter.rotate(90); //将绘图器平移到原始位置 painter.translate(-c); //指示绘图器使用opt中指定的样式来绘制选项卡的标签 painter.drawControl(QStyle::CE_TabBarTabLabel,opt); //将绘图器恢复到应用变换之前保存的状态 painter.restore(); } }