gpt4 book ai didi

c++ - QTabWidget 隐藏和显示标签

转载 作者:行者123 更新时间:2023-11-30 03:15:28 43 4
gpt4 key购买 nike

我在使用 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 始终为空。但是现在插入功能不能正常工作。我认为我有问题,但不理解我的问题。

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

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

也许有人可以帮助我?

最佳答案

如果您调用 QTabWidget::removeTab您从 QTabWidget 的子树中删除指定索引处的选项卡,但实际上并未删除选项卡实例,因此当您使用 QTabWidget::findChild 搜索同一选项卡时你找不到它,因为它不是你的 child QTabWidget了。从你展示的代码来看,我认为你可能无论如何都找不到它,因为 findChild搜索具有指定 objectName 的小部件但你从来没有为你的标签设置它。

一种解决方案是存储删除的标签,然后在需要时恢复它们。

假设m_hiddenTabsQHash<QString, QWidget*>QMap<QString, QWidget*>你可以尝试这样的事情。

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

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

// Find ribbon tab
auto tab = m_hiddenTabs.take(tabName.toLower());
if(tab){
QTabWidget::insertTab(2, tab, tabName);
}
}

关于c++ - QTabWidget 隐藏和显示标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036413/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com