您好我试图在不同的行中设置不同的属性。 结果是它只采取最后一次而不是所有的属性。
前:
QLabel *lb = new QLabel();
lb->setText("Hello");
lb->setStyleSheet("border: 20px solid grey");
lb->setStyleSheet("QLabel {background-color : black;}");
lb->setStyleSheet("QLabel {color : white;}");
lb->show();
此示例仅将文本颜色设置为白色,其他属性未更新。
我知道一种设置所有属性的解决方案,
lb->setStyleSheet("QLabel { background-color : black; color : white; border: 20px solid grey}");
但我想单独设置它们并使用setStyleSheet。 提前致谢
答案 0 :(得分:1)
这样的事情可能会更具吸引力吗?
lb->setStyleSheet(
"border: 20px solid grey;"
"QLabel {"
"background-color : black;"
"color : white;"
"}"
);
它基本上与将它们全部放在一个字符串中相同,但它在视觉上被分成几行。
PS。不确定第一行是否是实际有效的css代码,因为它不在选择器框中......但它可能是Qt的一部分,所以我离开了它。
修改强>:
如果您需要在代码中的不同位置添加每一行,您可以获取当前样式表然后添加到其中
lb->setStyleSheet(lb->styleSheet() + "border: 20px solid grey;");
lb->setStyleSheet(lb->styleSheet() + "QLabel {background-color: black}");
lb->setStyleSheet(lb->styleSheet() + "QLabel {color: white}");
答案 1 :(得分:1)
每次拨打setStyleSheet
时,它都会覆盖之前的值
你可以做的是制作一个方法,将所有样式收集到一行。
QString collectAllStyles() const
{
return QString("QLabel { background-color : %1; color : %2; border: %3}").arg(backgroundStyleText()).arg(colorStyleText()).arg(borderStyleText());
}
当其中一种颜色发生变化时,只需拨打此电话:
lb->setStyleSheet(collectAllStyles());