QTabWidget隐藏某些tab

对于一个QTabWidget,有时我们需要在不同的状态下显示不同的tab,需要隐藏掉某些tab。使用removeTab()固然可以做到,但是这样的话我们再次需要显示这些tab时再把它们加进去,有时候计算index会很麻烦。所以有没有什么办法可以在不删除tab的前提下隐藏掉某些tab呢,这样就能避免再次添加tab和计算index的麻烦。 
遗憾的是Qt并没有对tab提供类似hide()或者setVisible()这样的接口(查看源码你会发现tab并不是QWidget),那么怎么做呢?我的方案是这样的:利用QTabWidget::setTabEnabled()接口与QSS来共同实现隐藏tab。 
setTabEnabled()很容易理解,可以在不需要使用某些tab时将其禁用掉。但是禁用掉tab并不会使其隐藏,这时就需要QSS出马了。QSS实际上也不能隐藏tab,但它可以把处于禁用状态的tab宽度设为0,同时将文字颜色设为透明,然后就看不到这个tab了,这样就间接达到了隐藏的目的。 

    int tabNum = ui->tabWidget->count();
    for(int i=0; i<tabNum; i++)
    {
        ui->tabWidget->setTabEnabled(0, false);
    }

    
    ui->tabWidget->setStyleSheet("QTabBar::tab:disabled {width: 0; color: transparent;}");
发布了1670 篇原创文章 · 获赞 357 · 访问量 234万+

猜你喜欢

转载自blog.csdn.net/tony2278/article/details/104008712