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中绘制选项卡时执行此操作。

选项卡边界矩形将不会被选项卡栏更改。这些选项卡以北选项卡栏形状从左到右绘制,以东部选项卡栏形状从上到下,等等。

最后绘制所选的选项卡,这样很容易将其绘制在其他选项卡上(如果是更大)。

 

 标签栏可以在其标签上设置的状态表如下:

StateState Set When
State_Sunken 用鼠标按下该选项卡。
State_Selected 如果是当前选项卡。
State_HasFocus 标签栏具有焦点,并且已选择标签

请注意,即使选项卡栏未被禁用,单个选项卡也可能被禁用。 如果选项卡栏处于活动状态,则该选项卡将处于活动状态。

以下是QStyleOptionTabV2的成员表:

MemberContent
cornerWidgets 是CornerWidget枚举的标志,指示标签栏是否以及具有哪个角小部件。
icon 选项卡的QIcon
iconSize 图标的QSize
position 一个TabPosition枚举值,指示相对于其他选项卡,该选项卡在栏中的位置。
row 保存选项卡所在的行
selectedPosition SelectedPosition枚举的值,它指示选定的选项卡与该选项卡相邻还是该选项卡。
shape QTabBar :: Shape枚举的值指示该选项卡是圆角还是三角形以及选项卡的方向。
text 标签文字

 

选项卡小部件的框架使用QStyleOptionTabWidgetFrame作为样式选项。 我们在这里列出其成员。 除了通用标志外,它没有设置状态。

Membercontent
leftCornerWidgetSize 左上角小部件的QSize(如果有)。
rightCornerWidgetSize 右上角小部件的QSize(如果有)。
lineWidth 保持与绘制面板的线。
midLineWith 该值当前始终为0。
shape 标签栏上标签的形状。
tabBarSize 标签栏的QSize。
posted @ 2020-11-03 23:12  流浪侠客  阅读(3945)  评论(0编辑  收藏  举报