我的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);
}
}
也许有人可以帮助我吗?
答案 0 :(得分:2)
如果您调用QTabWidget::removeTab
,则从QTabWidget
的子树中删除了指定索引处的标签,但是该标签实例实际上并未删除,因此当您使用{搜索该标签时{1}}之所以找不到,是因为它不再是您的QTabWidget::findChild
的子代。从您显示的代码中,我认为您可能仍然找不到它,因为QTabWidget
搜索具有指定findChild
的小部件,但是您从未为选项卡设置它。
一种解决方案是存储已删除的标签,然后在需要时将其还原。
假设objectName
是m_hiddenTabs
或QHash<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 处的页面可见;否则位置索引处的页面将被隐藏。页面的标签被适当地重绘。