Qt5样式表:仅在默认设置上应用样式
我正在Qt5中使用样式表。这里有一个例子:Qt5样式表:仅在默认设置上应用样式,qt,qt5,qtstylesheets,Qt,Qt5,Qtstylesheets,我正在Qt5中使用样式表。这里有一个例子: QWidget { color: #b1b1b1; background-color: #323232; font-size: 12px; } QSpinBox, QDoubleSpinBox { color: black; background-color: darkorange; } QLabel { background-color: transparent; } 然后我在main中设置样式表
QWidget {
color: #b1b1b1;
background-color: #323232;
font-size: 12px;
}
QSpinBox, QDoubleSpinBox {
color: black;
background-color: darkorange;
}
QLabel {
background-color: transparent;
}
然后我在main中设置样式表:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle("Fusion");
Widget w;
QFile file("://mystylesheet");
file.open(QFile::ReadOnly);
QString stylesheet = file.readAll();
file.close();
w.setStyleSheet(stylesheet);
w.show();
return a.exec();
}
但它会覆盖我在表单编辑器中设置的任何自定义值。相反,我想要的恰恰相反:样式表应该为控件设置默认属性,然后我可以在编辑器中设置不同的值来覆盖它们
有可能吗?怎么可能
例如:我可能希望有一些具有不同背景颜色的标签:如果我在编辑器中设置了一个标签,则不应被样式表覆盖。如果希望表单上写入的属性不被.qs覆盖,则应使用
选择器,例如,如果您的QLabel
具有customlabel
objectName,则可以使用以下命令在表单上设置它:
QLabel#customlabel {
background-color: gray
}
例如:
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
const std::string qss = R"(QWidget {
color: #b1b1b1;
background-color: #323232;
font-size: 12px;
}
QSpinBox, QDoubleSpinBox {
color: black;
background-color: darkorange;
}
QLabel {
background-color: transparent;
})";
QWidget w;
QVBoxLayout lay(&w);
for(const QString & name: {"label1", "label2", "label3"}){
QLabel *label = new QLabel(name);
label->setObjectName(name);
lay.addWidget(label);
}
QLabel *label = new QLabel("customlabel");
label->setObjectName("customlabel");
lay.addWidget(label);
// emulate the Qt Designer form
label->setStyleSheet("QLabel#customlabel{ background-color: gray }");
// use .qss
w.setStyleSheet(QString::fromStdString(qss));
w.show();
return a.exec();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
常量std::字符串qss=R”(QWidget{
颜色:#B1B1;
背景色:#323232;
字体大小:12px;
}
QSpinBox,QDoubleSpinBox{
颜色:黑色;
背景色:达克朗格;
}
QLabel{
背景色:透明;
})";
qw;
QVBoxLayout布局布局布局(w&w);
for(常量QString&name:{“label1”、“label2”、“label3”}){
QLabel*标签=新的QLabel(名称);
标签->设置对象名称(名称);
lay.addWidget(标签);
}
QLabel*标签=新的QLabel(“自定义标签”);
标签->设置对象名称(“自定义标签”);
lay.addWidget(标签);
//模拟Qt设计器窗体
标签->设置样式表(“QLabel#customlabel{背景色:灰色}”);
//使用.qss
w、 setStyleSheet(QString::fromStdString(qss));
w、 show();
返回a.exec();
}
输出: