文章目錄
- 1. 詳細介紹
- 2. 常用屬性
- 3. 信號
- 4. 常用函數
- 5. 官方示例Tab Dialog
QTabWidget提供一堆選項卡式小部件。
1. 詳細介紹
選項卡式部件提供一個選項卡欄和一個用于顯示與每個選項卡相關的頁面的頁面區域。
默認情況下,選項卡欄顯示在頁面區域上方,可以使用不同的配置,設置TabPosition屬性。
每個選項卡都與一個不同的小部件相關聯,這個小部件成為頁面。
頁面區域中只顯示當前頁面,所有其他頁面都被隱藏。可以通過單擊選項卡或按下Alt+字母快捷鍵來顯示不同的頁面。
一般使用QTabWidget的方法如下操作:
-
創建一個QTabWidget對象;
-
為選項卡中的每個頁面創建一個QWidget對象,該對象不要指定父窗口;
-
將子窗口小部件插入頁面窗口小部件,使用布局將其正常定位;
-
調用addTab()或insertTab()函數將頁面小部件放入選項卡小部件中,為每個選項卡頁面提供一個合適的標簽和一個可選的鍵盤快捷鍵。
示例如下:
// 1. 創建一個QTabWidget對象QTabWidget *tabWidget = new QTabWidget(this);// 2. 為選項卡中的頁面創建QWidget對象,創建2個選項卡QWidget *page1 = new QWidget;QWidget *page2 = new QWidget;//3. 將子窗口小部件插入到頁面中// page1頁面插入一個按鈕,page2頁面插入一個標簽QPushButton *btn = new QPushButton(tr("&Show"), page1);QLabel *label = new QLabel(tr("wait for show"), page2);// 4. 將頁面添加到QTabWidget對象中,并為每個選項卡提供一個合適的標簽和可選的鍵盤快捷鍵tabWidget->addTab(page1, tr("page-1"));tabWidget->addTab(page2, tr("page-2"));
顯示如下:
選項卡的位置由tabPosition屬性定義,默認在North;
形狀由tabShape定義,默認是Rounded。
當選擇一個頁面時會發送currentChanged()信號。
當前頁面的索引調用currentIndex()獲取,當前頁面的部件調用currentWidget()函數獲取。
widget()函數獲取給定索引的頁面部件的指針,indexOf()函數查找部件的索引位置。
setCurrentWidget()或setCurrentIndex()顯示特定頁面。
可以調用setTabText()或setTabIcon()函數更改選項卡的文本和圖標;
可以使用removeTab()函數刪除選項卡及其關聯頁面。
調用setTabEnabled()可以啟用或禁用選項卡頁面。
- 如果啟用某個選項卡頁面,會正常繪制該選項卡,并且可以選擇該選項卡;
- 如果禁用某個選項卡頁面,以不同方式繪制該選項卡,且用戶無法選擇此選項卡。
需要注意的是,即使禁用了某個頁簽,頁面仍然是可見的。
選項卡是拆分復雜對話框的一種很好的方法。另一種選擇是使用QStackedWidget,為其提供一些在頁面之間導航的方法,比如QToolBar或QListWidget。
QTabWidget中的大部分功能由QToolBar(位于頂部,提供選項卡)和QStackedWidget(大部分區域,組織各個頁面)提供。
2. 常用屬性
除了繼承自QWidget的屬性外,QTabWidget類提供了一些常用的屬性,如下:
屬性 | 類型及說明 |
---|---|
count | int,選項卡欄中的選項卡個數 |
currentIndex | int,當前頁面的索引,-1表示沒有當前部件 |
documentModel | bool,標志選項卡部件是否以適合文檔頁面的模式呈現。 true不會呈現選項卡部件框架,此時適用于顯示文檔類型 |
elideMode | Qt::TextElideMode,如何消隱選項卡欄中的文本。 控制當沒有足夠的空間顯示給定選項卡欄大小的項目時,如何對其進行消隱。 |
iconSize | QSize,選項卡欄中圖標的大小。 |
movable | bool,用戶是否可以在選項卡區域內移動選項卡。 |
tabBarAutoHide | bool,如果為true,選項卡欄包含的選項卡少于2個時,該選項卡欄將自動隱藏。默認情況下,該屬性為false。 |
tabPosition | TabPosition,選項卡欄的位置 |
tabShape | TabShape,選項卡小部件中選項卡的形狀。 |
tabsClosable | bool,是否將關閉按鈕自動添加到每個選項卡。 |
usesScrollButtons | bool,當選項卡欄有多個按鈕時,此屬性決定是否應使用按鈕滾動選項卡。 當選項卡欄中的選項卡太多而無法容納其大小時,選項卡欄可以選擇擴展其大小,也可以選擇添加允許滾動選項卡的按鈕。 |
3. 信號
QTabWidget提供的信號有:
信號 | 說明 |
---|---|
currentChanged() | 頁面索引發生變化時發送該信號 |
tabBarClicked() | 用戶單擊索引處的選項卡時,發出該信號。 |
tabBarDoubledClicked() | 用戶雙擊索引處的選項卡時發出該信號。 |
tabCloseRequested() | 單擊選項卡上的關閉按鈕時發出此信號。 |
4. 常用函數
除了與獲取和設置屬性相關的函數外,QTabWidget還提供了一些有用的函數:
-
插入頁面函數
addTab()
/insertTab()
,如果在show()之后調用該函數,布局系統將嘗試根據其小部件層次結構的變化進行調整,可能導致閃爍。為了防止這種情況發生,可以在更改之前將updateEnabled屬性設置為false,在完成更改之后將屬性設置為true,使小部件再次接收繪制事件。 -
刪除或清空
clear()
,移除所有的頁面,但是不刪除它們。
?removeTab()
,移除指定索引處的頁面,部件本身不會被刪除。 -
選項卡欄相關
tabBar()
,獲取QTabBar類對象。
5. 官方示例Tab Dialog
官方示例Tab Dialog顯示了如何使用QTabWidget類構建選項卡對話框。
選項卡對話框示例由一個TabDialog類組成,該類提供三個選項卡,每個選項卡都包含有關特定文件的信息,以及兩個用于接受或拒絕對話框內容的標準按鈕。
相關文檔說明及代碼見:https://github.com/Innern/Qt/tree/master/Widgets/TabWidget。