因为最近要做一个把tabBar放在两侧的一个QTabWidget,但是发现文字的方向是竖着的,就研究了一下这个东西,发现tabBar里面是可以添加控件的,所以我就中tabBar里面添加了一个QLabel控件,控件的字体是正常的。
实现效果:
用到函数:
Void setTabButton(int index,ButtonPosition position,QWidget *widget);//给tabBar添加控件
QWidget *tabButton(int index,ButtonPosition) const; //获取tab上添加的控件
.h文件
class tabWidget: public QTabWidget
{
Q_OBJECT
public:
explicit tabWidget(QWidget *parent = nullptr);
void updateselect(); //用来设置一开始选中的状态
int addTab(QWidget *widget, const QString &); //重载(不是虚函数)
signals:
public slots:
void slotSetLabelColor(int color); //自定义槽(响应tabBar点击事件)
};
.cpp文件
tabWidget::tabWidget(QWidget *parent) : QTabWidget(parent)
{
connect(this,SIGNAL(tabBarClicked(int)),this,SLOT(slotSetLabelColor(int)));
}
void tabWidget::slotSetLabelColor(int index)
{
for(int i=0;i<this->count();i++)
{
this->tabBar()->tabButton(i,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);");
}
this->tabBar()->tabButton(index,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:white;");
}
int tabWidget::addTab(QWidget *widget, const QString &label)
{
int nRetrun=QTabWidget::addTab(widget,"");
int count=this->count()-1;
QLabel *labelTab=new QLabel(label,this);
QFont ft;
ft.setPointSize(20);
labelTab->setFont(ft);
labelTab->setAlignment(Qt::AlignCenter);
this->tabBar()->setTabButton(count,QTabBar::ButtonPosition::RightSide,labelTab);
this->tabBar()->tabButton(count,QTabBar::ButtonPosition::RightSide)->setFixedHeight(64);
updateselect();
return nRetrun;
}
void tabWidget::updateselect()
{
for(int i=0;i<this->currentIndex();i++)
{
this->tabBar()->tabButton(i,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:black;");
}
this->tabBar()->tabButton(this->currentIndex(),QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:white;");
}
在其它类里面调用写好的自定义tabwidget:
tabWidget*m_tab=new test(this);
QWidget *b1=new QWidget();
QWidget *b2=new QWidget();
m_tab->setGeometry(0,0,500,400);
m_tab->setStyleSheet("QTabBar::tab{min-width:140px;max-width:140px;min-height:64px;max-height:64px;padding:0;}"
"QTabBar::tab:selected{background:#025bc7}");
//设置tabwidget位置
m_tab->setLayoutDirection(Qt::RightToLeft);
m_tab->setTabPosition(QTabWidget::TabPosition::East);
m_tab->addTab(b1,tr("一个"));
m_tab->addTab(b2,tr("两个"));