QStyle 小部件样式设计 (八)
样式设计方法:
在本节中,我们将研究Qt的大多数小部件的样式。希望这将节省您在开发自己的样式和小部件时的时间和精力。
您在这里找不到其他地方无法获得的信息(即,通过检查与样式相关的类的源代码或类描述)。
每个小部件都有以下内容:
带有其样式选项的成员(变量等)的表。
可以在窗口小部件上设置状态标志(QStyle :: StateFlag)的表格以及设置状态的时间。
它的元素树(请参见样式元素部分)。
小部件的图像,其中概述了元素。
元素树包含原始,控件和复杂的样式元素。通过对元素树进行自上而下的遍历,可以得出绘制元素的顺序。在节点中,我们编写了在绘制节点元素时应考虑的子元素矩形,子控制元素和像素度量。
我们的样式设计方法以小部件的绘制为中心。绘制过程中使用的子元素矩形,子控件和像素度量的计算仅作为元素树中的内容列出。
通用小部件属性:
一些状态和变量对于所有小部件都是通用的。 这些通过QStyleOption :: initFrom()设置。 并非所有元素都使用此功能。
具有常见状态的表如下:
State | State Set When |
---|---|
State_Enabled | 设置是否未禁用小部件(请参阅QWidget :: setEnabled()) |
State_Focus | 设置小部件是否具有焦点(请参阅QWidget :: hasFocus()) |
State_KeyobordFocusChange | 当用户使用键盘更改焦点时设置(请参阅Qt :: WA_KeyboardFocusChange) |
State_MouseOver | 设置鼠标光标是否在小部件上 |
State_Active | 设置小部件是否为活动窗口的子级。 |
State_HasEditFocus | 设置小部件是否具有编辑焦点 |
小部件的其他常见成员是:
Member | Content |
---|---|
rect | 要绘制的元素的边界矩形。 这设置为小部件边界矩形(QWidget :: rect())。 |
direction | 布局方向; Qt :: LayoutDirection枚举的值。 |
palette | 绘制元素时要使用的QPalette。 这设置为窗口小部件面板(QWidget :: palette())。 |
fontMetrics | 在小部件上绘制文本时要使用的QFontMetrics。 |
用于复杂样式元素的复杂样式选项(继承QStyleOptionComplex的类)共享两个变量:subControls和activeSubControls。
这两个变量都是QStyle :: SubControl枚举值的或运算组合。 它们指示复杂控件包含哪些子控件,以及哪些控件当前处于活动状态。
如前所述,样式计算小部件内容的大小,小部件从中计算大小提示。 此外,复杂的控件还使用该样式来测试鼠标悬停在哪个子控件上。