Qt在样式表中使用调色板颜色

时间:2018-08-17 09:31:37

标签: qt qstylesheet qpalette

enter code here在qt中,通常用QWidget设置QPalette的颜色。

示例:

QPalette palette = new QPalette();
palette.setBrush(QPalette::Base, this->palette().backgorund());

QLineEdit *line = new QLineEdit();
line->setPalette(palette);

现在我有一个小问题。用QPalette不能更改QLineEdit的边框颜色。就是说,我必须使用QStyleSheet

示例:

QLineEdit *line = new QLineEdit();
line.setStyleSheet("border: 1px solid green");

但是现在我无法使用QPalette设置QLineEdit的底色,因为QLineEdit的背景色不再与QPalette::base连接。 也就是说,以下代码不会更改background-color中的QLineEdit

QPalette palette = new QPalette();
palette.setBrush(QPalette::Base, this->palette().backgorund());

QLineEdit *line = new QLineEdit();
line->setPalette(palette);
line->setStyleSheet("border: 1px solid green");

但是不可能在StyleSheet中定义QLineEdit的background-color,因为background-color的{​​{1}}必须是动态的。

我的问题:如何将QLineEdit的背景颜色与QLineEdit连接起来,以QPalette::base动态地定义background-color的{​​{1}}? >

3 个答案:

答案 0 :(得分:2)

只需在运行时构造所需的QString ...

auto style_sheet = QString("border: 1px solid green;"
                           "background-color: #%1;")
  .arg(QPalette().color(QPalette::Base).rgba(), 0, 16);

以上内容应产生QString,例如...

border: 1px solid green;
background-color: #ffffffff;

然后...

line->setStyleSheet(style_sheet);

答案 1 :(得分:2)

或者:

line->setStyleSheet(QStringLiteral(
    "border: 1px solid green;"
    "background-color: palette(base);"
));

参考:http://doc.qt.io/qt-5/stylesheet-reference.html#paletterole

使用PaletteRole还可以使CSS位于单独的文件/源中。

答案 2 :(得分:0)

我为自己的情况找到了解决方案。因为我只想掩盖边框,而又不想给边框上色,所以我可以使用方法QLineEdit::setFrame(bool)。但是,如果我想像上面的示例一样为框架上色,该怎么办?到目前为止,我还没有找到解决方案。我对每个答案都很满意。