一、自定义 widget 的两种方式
自定义 widget 外观的方式有两种:
- 子类化 QStyle;
- 使用 Qt Style Sheets 机制;
Qt Style Sheets 是一种强大的机制,其概念、术语、语法与 CSS 类似。
注意:如果同时设置了 qss 和 widget 的外观函数,如 setFont(),则 qss 优先。
二、一个简单示例
Style sheets(样式表)是一种文本规范,既可以调用 QApplication::setStyleSheet()
将样式应用于整个程序中的所有 widget,也可以使用 QWidget::setStyleSheet()
单独设置某个 widget。如果同一个 widget 设置了多个 qss,则 Qt 会从这些设置中派生出有效的样式表,称为“cascading(级联)”。
例如,以下规则指定了:所有的 QLineEdit 的背景色为黄色,所有的 QCheckBox 文本为红色:
QLineEdit { background: yellow }
QCheckBox { color: red }
三、QSS 比 QPalette 强大
QPalette 调色板与平台相关,例如同一个窗口在 windows、macOS 上会有不同的样式。而 QSS 保证在所有平台上具有相同的外观
。
这是因为 QSS 作用在 widget 当前样式之上。在绘制 widget 时,paintEvent() 中会调用 QWidget::style() 来绘制外观。如果没有设置 qss,则 style() 会返回特定于平台的样式,例如在 Windows 上为 QWindowsVistaStyle;如果设置了 qss,那么 Qt 也会返回一个 QStyle,只不过其中包含了 qss 的设置。
四、使用 Qt Designer 方便查看 qss 效果
此外,在 Qt Designer 中可以方便的查看设置 qss 后的效果。