setstylesheet不单独设置属性

时间:2014-08-12 19:06:48

标签: c++ qt

您好我试图在不同的行中设置不同的属性。 结果是它只采取最后一次而不是所有的属性。

前:

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。 提前致谢

2 个答案:

答案 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());