QStyle Tabs QTabWidget QTabBar樣式設計 (十)


在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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM