样式(继承QStyle的类)代表小部件绘制并封装 GUI 的外观。 QStyle 类是一个抽象基类,它封装了 GUI 的外观。?Qt?的内置小部件使用它来执行几乎所有的绘图,确保它们看起来与等效的原生小部件完全一样。
Qt带有一系列内置样式,某些样式仅在特定平台上可用。自定义样式可作为插件使用,或者通过使用?QStyleFactory::create()创建特定样式类的实例并使用QApplication::setStyle()设置它。
?
点击获取Qt组件下载每种样式都提供了一种颜色 - 即QBrush,用于绘制小部件的调色板。对于不同的小部件状态(QPalette::ColorGroup)有一组颜色:激活(窗口中具有键盘焦点的小部件)、非激活(用于其他窗口的小部件)和禁用(被禁用的小部件),可以通过查询State_Active 和 State_Enabled 状态标志来找到这些状态。每个集合都包含由 QPalette::ColorRole 枚举给出的某些颜色角色,角色描述了应该在哪些情况下使用颜色(例如,用于绘制小部件背景、文本或按钮)。
如何使用颜色角色取决于样式,例如如果样式使用渐变,可以使用调色板颜色并使用QColor::darker()?和?QColor::lighter()使其更暗或更亮来创建渐变。通常如果您需要调色板未提供的画笔,则应尝试从中派生它。
提供调色板的QPalette存储不同小部件状态和颜色角色的颜色,样式的调色板由standardPalette() 返回。在应用程序 (QApplication::setStyle()) 或小部件 (QWidget::setStyle()) 上设置新样式时,标准调色板不会自动安装,因此您必须自己设置调色板 (QApplication::setPalette() ) 或 (QWidget::setPalette())。
不建议对颜色进行硬编码,因为应用程序和单个小部件可以设置自己的调色板,也可以使用其样式的调色板进行绘制。请注意,Qt 的小部件都没有设置自己的调色板,Java 风格确实对某些颜色进行了硬编码,但仅作为作者的决定; 不建议这样做。 当然,这并不意味着该样式在任何调色板中都应该看起来不错。
实现样式时,需要考虑几个问题,我们将在此处提供有关实现的一些提示和建议。
在实现样式时,需要查看小部件的代码和基类及其源代码,这是因为小部件使用不同的样式,因为不同样式的虚函数中的实现会影响绘图的状态(例如,通过更改 QPainter 状态而不恢复它和绘制一些元素替代适当的像素度量和子元素)。
建议样式不要使用QStyle::sizeFromContents()函数改变小部件的建议大小,而是让?QCommonStyle?实现来处理它。 如果需要进行更改,则应尽量保持较小; 如果小部件的布局在各种样式中看起来差别很大,则应用程序开发可能会很困难。
Qt技术交流群:166830288??????欢迎一起进群讨论