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