QTabWidget隐藏和显示选项卡

时间:2019-07-15 09:02:10

标签: c++ qt

我的QTabWidget有一些问题。如果缺少隐藏功能,则必须构建自己的功能。根据文档,我使用removeTab和insertTab,但是使用insert Tab时,我无法显示被删除的Tab页。

我用来添加

  RibbonTabContent *ribbonTabContent = new RibbonTabContent;
  QTabWidget::addTab(ribbonTabContent, tabIcon, tabName);

要删除,请使用:

void Ribbon::hideTab(const QString &tabName)
{
  // Find ribbon tab
  for (int i = 0; i < count(); i++)
  {
    if (tabText(i).toLower() == tabName.toLower())
    {
       QTabWidget::removeTab(i);
      break;
    }
  }
}

两个函数都起作用,pWidget始终为null。但是现在插入功能无法正常工作。我认为我有问题,但是不明白我的问题。

void Ribbon::showTab(const QString &tabName){

    // Find ribbon tab
    QWidget* pWidget= QTabWidget::findChild<RibbonTabContent *>(tabName);
    if(pWidget){
        QTabWidget::insertTab(2,pWidget, tabName);
    }
}

也许有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

如果您调用QTabWidget::removeTab,则从QTabWidget的子树中删除了指定索引处的标签,但是该标签实例实际上并未删除,因此当您使用{搜索该标签时{1}}之所以找不到,是因为它不再是您的QTabWidget::findChild的子代。从您显示的代码中,我认为您可能仍然找不到它,因为QTabWidget搜索具有指定findChild的小部件,但是您从未为选项卡设置它。

一种解决方案是存储已删除的标签,然后在需要时将其还原。

假设objectNamem_hiddenTabsQHash<QString, QWidget*>,您可以尝试这样的事情。

QMap<QString, QWidget*>

答案 1 :(得分:0)

不幸的是,QTabBar无法“隐藏”标签。

这是我非常简单的解决方法:将标签页标记为“已禁用”(例如ui->tabWidget->setTabEnabled(tabIndex, false);)。

然后,使用样式表将“已禁用”标签设置为完全不可见且不占用空间:

QTabBar::tab:disabled
{
    min-width: 0px;
    max-width: 0px; 
    color: rgba(0,0,0,0);
    background-color: rgba(0,0,0,0);
}

这对我来说几乎是完美的,唯一的缺点是您不能在同一选项卡中同时禁用和“隐藏”选项卡。但是,通常我想要一个或另一个,而不是两个都放在同一栏中。

答案 2 :(得分:0)

从 Qt 5.15 开始,也可以使用 setTabVisible:

void QTabWidget::setTabVisible(int index, bool visible)
<块引用>

如果visible为true,则index位置的页面可见;否则位置索引处的页面将被隐藏。页面的标签被适当地重绘。如果visible 为true,则位置index 处的页面可见;否则位置索引处的页面将被隐藏。页面的标签被适当地重绘。