重載QTabBar的paintevent
class TabBar: public QTabBar {
public:
QSize tabSizeHint(int index) const{
QSize s = QTabBar::tabSizeHint(index);
s.transpose();
return s;
}
protected:
void paintEvent(QPaintEvent * /*event*/){
QStylePainter painter(this);
QStyleOptionTab opt;
for(int i = 0;i < count();i++)
{
initStyleOption(&opt,i);
painter.drawControl(QStyle::CE_TabBarTabShape, opt);
painter.save();
QSize s = opt.rect.size();
s.transpose();
QRect r(QPoint(), s);
r.moveCenter(opt.rect.center());
opt.rect = r;
QPoint c = tabRect(i).center();
painter.translate(c);
painter.rotate(90);
painter.translate(-c);
painter.drawControl(QStyle::CE_TabBarTabLabel,opt);
painter.restore();
}
}
};
class TabWidget : public QTabWidget
{
public:
TabWidget(QWidget *parent=0):QTabWidget(parent){
setTabBar(new TabBar);
setTabPosition(QTabWidget::West);
}
};
在新建QTabWidget時如下
TabWidget *tabWidget = new TabWidget(this);
tabWidget->move(QPoint(width()/3, height()/3));
tabWidget->resize(QSize(width()/2, height()/2));
tabWidget->addTab(new TabBar, "參數設置");
tabWidget->addTab(new TabBar, "端口管理");
tabWidget->addTab(new TabBar, "用戶管理");
最終運行效果如下