QTabWidget 标签页tabBar放在两侧,文字方向改为水平

因为最近要做一个把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("两个"));

 

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值