Qt中QTabWidget隱藏某些tab

2021-08-13 17:21:13 字數 1489 閱讀 3912

對於乙個qtabwidget,有時我們需要在不同的狀態下顯示不同的tab,需要隱藏掉某些tab。使用removetab()固然可以做到,但是這樣的話我們再次需要顯示這些tab時再把它們加進去,有時候計算index會很麻煩。所以有沒有什麼辦法可以在不刪除tab的前提下隱藏掉某些tab呢,這樣就能避免再次新增tab和計算index的麻煩。

遺憾的是qt並沒有對tab提供類似hide()或者setvisible()這樣的介面(檢視原始碼你會發現tab並不是qwidget),那麼怎麼做呢?我的方案是這樣的:利用qtabwidget::settabenabled()介面與qss來共同實現隱藏tab。

settabenabled()很容易理解,可以在不需要使用某些tab時將其禁用掉。但是禁用掉tab並不會使其隱藏,這時就需要qss出馬了。qss實際上也不能隱藏tab,但它可以把處於禁用狀態的tab寬度設為0,同時將文字顏色設為透明,然後就看不到這個tab了,這樣就間接達到了隱藏的目的。

demo**如下:

#include "widget.h"

#include "ui_widget.h"

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

for (int i = 0; i < tabnum; i++)

ui->combobox->additem("13579");

ui->combobox->additem("02468");

ui->combobox->additem("159");

ui->combobox->additem("048");

}widget::~widget()

void widget::on_combobox_currenttextchanged(qstring text)

for (int i = 0; i < textlen; i++)}/*

* 似乎由於tab並不是qwidget的緣故,需要每次在對顯示的tab進行調整後,呼叫setstylesheet使其生效

*/ui->tabwidget->setstylesheet("qtabbar::tab:disabled ");

}

在改變qcombobox被選擇的item後,會根據當前item的text而顯示或隱藏某些tab。先使用settabenabled()禁用需要隱藏的tab,然後呼叫setstylesheet()將禁用的tab寬度設為0,文字顏色設為透明。

效果圖如下:

當然還有些細節需要注意,乙個是如果之前被選擇的tab如果被禁用掉的話,它不會自動重新選擇乙個可用的tab,這個需要手動處理;另乙個是如果仔細觀察的話,tab之間有乙個隱藏的tab的話對顯示樣式會有細微的影響,最左側和最右側最為明顯(可能會少乙個邊框)。

本文採用 cc-by 協議進行授權

Qt中QTabWidget隱藏某些tab

對於乙個qtabwidget,有時我們需要在不同的狀態下顯示不同的tab,需要隱藏掉某些tab。使用removetab 固然可以做到,但是這樣的話我們再次需要顯示這些tab時再把它們加進去,有時候計算index會很麻煩。所以有沒有什麼辦法可以在不刪除tab的前提下隱藏掉某些tab呢,這樣就能避免再次...

Qt記錄之QTabWidget的使用

qtabwidget實現出來效果就是標籤頁的介面,點選乙個標籤,主介面就展現那個標籤頁的東西。值得注意的就是以下幾點 1.qtabwidget addtab widget,title 增加乙個標籤頁。比如這個widget為qpushbutton,那個增加的標籤頁一整頁就是乙個按鈕。2.qtabwid...

Qt 隱藏滑鼠

qt 讀取和修改系統時間 qtime ct qtime currenttime 修改系統時間 change the system time qdatetime dt qdatetime currentdatetime dt.settime timeeditor time time t tt time...