58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
|
#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();
|
|||
|
}
|
|||
|
}
|