Qt Style Sheets 为定制界面带来了极大方便,通常情况下,使用某对象的setStyleSheet方法进行设置,如下:
//改变 QCheckBox 的style void setCheckBoxStyle(QCheckBox *checkBox) { // checkBox->setStyleSheet("QCheckBox::indicator:unchecked{" "image:url(:/checkbox/checkbox_normal)}" "QCheckBox::indicator:hover{" "image:url(:/checkbox/checkbox_hover)}" "QCheckBox::indicator:pressed{" "image:url(:/checkbox/checkbox_press)}" "QCheckBox::indicator:checked{" "image:url(:/checkbox/checkbox_selected_normal)}" "QCheckBox::indicator:checked:hover{" "image:url(:/checkbox/checkbox_selected_hover)}" "QCheckBox::indicator:checked:pressed{" "image:url(:/checkbox/checkbox_selected_press)}" "" "QCheckBox {font-weight: 450; font-size: 12px; color:#112937;}" ); }
这样做能达到目的,但是基本上每个对象都有一个setStyleSheet方法,位置不定,难以维护。
一种好的方法是将所有qss代码写个一个文本文件中,在应用程序开始时加载,如下:
QApplication a(argc, argv); QFile qss(":/qss/logindialog.qss"); qss.open(QFile::ReadOnly); a.setStyleSheet(qss.readAll()); qss.close(); LoginDialog w; w.show(); return a.exec();
其中logindialog.qss中只定制样式即可,内容如下:
QCheckBox::indicator:unchecked{ image:url(:/checkbox/checkbox_normal) } QCheckBox::indicator:hover{ image:url(:/checkbox/checkbox_hover) } QCheckBox::indicator:pressed{ image:url(:/checkbox/checkbox_press) } QCheckBox::indicator:checked{ image:url(:/checkbox/checkbox_selected_normal) } QCheckBox::indicator:checked:hover{ image:url(:/checkbox/checkbox_selected_hover) } QCheckBox::indicator:checked:pressed{ image:url(:/checkbox/checkbox_selected_press) } QCheckBox { font-weight: 450; font-size: 12px; color:#112937; }
这种方式能轻易的实现换肤效果,需要特别注意的是, 使用如下对象名设置QSS时:
QPushButton#button{ border-image:url(:/button/button_normal); background:transparent; }
在创建button时,需要设置ObjectName,这样QSS才能识别,如下:
button = new QPushButton(this); button->setObjectName("button");//设置对象名后,在QSS中才能使用QPushButton#button进行配置
常用的qss样式见[Qt 常用样式]。
本文思路来自TOM, Thanks.