[英]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.