[英]QTabWidget Hide and Show tabs
我在使用 QTabWidget 时遇到了一些问题。 如果缺少隐藏功能,我必须自己构建。 根据文档,我使用 removeTab 和 insertTab,但使用插入选项卡时,我无法显示已删除的选项卡页面。
我用来添加
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
你不能找到因为它不再是你的QTabWidget
的孩子了。 从您显示的代码中,我认为您可能无论如何都找不到它,因为findChild
搜索具有指定objectName
的小部件,但您从未为您的选项卡设置它。
一个解决方案是存储删除的选项卡,然后在需要时恢复它们。
假设m_hiddenTabs
是QHash<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);
}
}
从 Qt 5.15 开始,也可以使用setTabVisible
:
void QTabWidget::setTabVisible(int index, bool visible)
如果visible 为true,则位置index 处的页面可见; 否则位置索引处的页面将被隐藏。 页面的标签被适当地重绘。如果visible 为true,则位置index 处的页面可见; 否则位置索引处的页面将被隐藏。 页面的选项卡被适当地重绘。
不幸的是 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);
}
这对我来说几乎完美,唯一的缺点是你不能在同一个标签栏中同时使用禁用和“隐藏”标签。 但是,通常我想要一个或另一个,而不是在同一个酒吧里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.