Qt设置界面方式
1.继承QStyle,实现自定义子类
2.Qt Style Sheets(类似与HTML CSS)配置
概览
QApplication::setStyleSheet设置应用程序的全部样式;
QWidget::setStyleSheet设置特定QWidget或者其子类的样式。
Qt Style Sheets支持级联设置,比QPalette的功能更加强大,当一个style sheet设置后,QWidget::style()将返回样式包装器,而不是平台本身的样式。
语法
1selector+declaration selector是界面 declaration是界面属性
例如:QPushButton {color:red} QPushButton是selector {color:red}是declaration
规则:QPushButton和它的子类的前景色是红色。
2.declaration大小写不敏感,color Color COLOR和cOloR表示同一属性。
3.selector带下斜敏感,类名 对象名和Qt属性名(?)
4.不同的selector可以用逗号(,)分隔组装后,使用相同的declaration。
例如:QPushButton,QLineEdit,QComboBox{color:red} ==
QPushButton{color:red}
QLineEdit{color:red}
QComboBox{color:red}
5.declaration由一组property:value组成,用{}包起来。
例如:QPushButton{color:red; background-color:white}
6.selector类型
universal selector | * | 所有widgets |
type selector | QPushButton | QPushButton和它的子类 |
property selector | QPushButton[flat="false"] | flat是false的QPushButton = QWidget中的属性必须支持可以调用toString, ~=QWidget中的属性包含设置的属性名 |
class selector | .QPushButton | QPushButton,不包含其子类,该表达式等价于 *[class ~= "QPushButton"] |
id selector | QPushButton#okButton | QPushButton对象名为okButton, object name |
descendant selector | QDialog QPushButton | QPushButton的父对象、祖父对象等是QDialog |
child selector | QDialog QPushButton | QPushButton的父对象是QDialog(直属对象) |
7.sub-controls
复杂界面,有子控制对象的widget,例如QComboBox包含drop-down按钮,QSpinBox包含up and down arrows。
selector可以包含子控制对象。例如
QComboBox::drop-down{image:url(dropdown.png)}
8.pseudo-states
selectors可以包含pseudo-states,设置widget某一种状态。用冒号(:)间隔。例如 QPushButton:hover{color:white}
支持!符号 如:QRadioButton:!hover{color:red}
支持串联,如:QCheckBox:hover:checked{color:white}
QPushButton:hover:!pressed{color:blue}
QCheckBox:hover, QCheckBox:checked{color:white}
QComboBox::drop-down:hover{image:url(dropdown_bright.png)}
9conflic Resolution
考虑到对同一对象的同一属性多次设置样式,如
a. QPushButton#okButton{color:gray}
b. QPushButton{color:red}
a样式比b样式更具针对性,故优先。
带有pseudo-states的selector,如
a. QPushButton:hover{color:white}
b. QPushButton{color:red}
a比b具有高优先级
对于冲突的属性设置,遵循下列规则
1.
10.级联
qApp->setStyleSheet("QPushButton{color:white}");
myPushButton->setStyleSheet("color:blue");
myPushButton的color为blue.
11.继承
qApp->setStyleSheet("QGroupBox{color:red;}");
如果QPushButton是QGroupBox的子对象,QPushButton不继承QGroupBox的设置,若需要QPushButton继承样式,
qApp->setStyleSheet("QGroupBox, QGroupBox *{color:red;}");
或者qApp->setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles, true);
如果palette和style sheet同时设置,style sheet具有高优先级。
12.命名空间
namespace ns{
class MyPushButton : public QPushButton{};
}
qApp->setStyleSheet("ns--MyPushButton{background-color:yellow;}");