在Qt中,QTabBar使用樣式繪制其選項卡。 選項卡存在於包含QTabBar的QTabWidget中,也可以作為單獨的欄存在。
如果該欄不是選項卡小部件的一部分,它將繪制自己的基數。QTabBar布局選項卡,因此樣式無法控制選項卡的放置。
但是,在布局其選項卡時,該欄會詢問PM_TabBarTabHSpace和PM_TabBarTabVSpace的樣式,該樣式在選項卡欄選項卡標簽的最小尺寸(圖標和文本)上超出了寬度和高度。
樣式還可以在布局前進一步影響選項卡的大小,因為選項卡欄要求提供CT_TabBarTab。桿的邊界矩形是通過當它是微件(仍在考慮CT_TabBarTab)的一部分的標簽窗口小部件決定。
當所有選項卡都不適合時,選項卡欄負責繪制出現在選項卡欄上的按鈕。 它們的位置不受樣式控制,但是按鈕是QToolButtons,因此由樣式繪制。
這是QTabWidget和QTabBar的樣式結構:
虛線表示QTabWidget包含一個標簽欄,但自身不繪制,QTabBar僅在不屬於標簽小部件的情況下繪制其基線,並且該標簽欄保留兩個工具按鈕,當所有標簽頁都滾動時 不合適; 有關其元素樹,請參見工具按鈕。
另請注意,由於按鈕是選項卡欄的子項,因此它們會在欄的后面繪制。 包圍矩形的制表符通過PM_TabBarBaseOverlap與底部重疊。
這是Java風格的選項卡小部件:
在Java樣式(以及Windows)中,標簽欄的形狀和標簽的邊界矩形與CE_TabBarTab相同。請注意,選項卡與選項卡小部件框架重疊。標簽欄(如果已繪制)的底部是標簽和框架重疊的區域。
選項卡的樣式選項(QStyleOptionTab)包含圖形選項卡的必要信息。該選項包含選項卡在選項卡欄中的位置,所選選項卡的位置,選項卡的形狀,文本和圖標。在Qt 4.1之后,該選項應轉換為QStyleOptionTabV2,其中還包含圖標大小。
由於Java樣式選項卡不重疊,因此我們還以Windows樣式顯示了選項卡小部件的圖像。請注意,如果希望選項卡水平重疊,請在CE_TabBarTabShape中繪制選項卡時執行此操作。
選項卡邊界矩形將不會被選項卡欄更改。這些選項卡以北選項卡欄形狀從左到右繪制,以東部選項卡欄形狀從上到下,等等。
最后繪制所選的選項卡,這樣很容易將其繪制在其他選項卡上(如果是更大)。
標簽欄可以在其標簽上設置的狀態表如下:
State | State Set When |
---|---|
State_Sunken | 用鼠標按下該選項卡。 |
State_Selected | 如果是當前選項卡。 |
State_HasFocus | 標簽欄具有焦點,並且已選擇標簽 |
請注意,即使選項卡欄未被禁用,單個選項卡也可能被禁用。 如果選項卡欄處於活動狀態,則該選項卡將處於活動狀態。
以下是QStyleOptionTabV2的成員表:
Member | Content |
---|---|
cornerWidgets | 是CornerWidget枚舉的標志,指示標簽欄是否以及具有哪個角小部件。 |
icon | 選項卡的QIcon |
iconSize | 圖標的QSize |
position | 一個TabPosition枚舉值,指示相對於其他選項卡,該選項卡在欄中的位置。 |
row | 保存選項卡所在的行 |
selectedPosition | SelectedPosition枚舉的值,它指示選定的選項卡與該選項卡相鄰還是該選項卡。 |
shape | QTabBar :: Shape枚舉的值指示該選項卡是圓角還是三角形以及選項卡的方向。 |
text | 標簽文字 |
選項卡小部件的框架使用QStyleOptionTabWidgetFrame作為樣式選項。 我們在這里列出其成員。 除了通用標志外,它沒有設置狀態。
Member | content |
---|---|
leftCornerWidgetSize | 左上角小部件的QSize(如果有)。 |
rightCornerWidgetSize | 右上角小部件的QSize(如果有)。 |
lineWidth | 保持與繪制面板的線。 |
midLineWith | 該值當前始終為0。 |
shape | 標簽欄上標簽的形狀。 |
tabBarSize | 標簽欄的QSize。 |