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}}? >
答案 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)
。但是,如果我想像上面的示例一样为框架上色,该怎么办?到目前为止,我还没有找到解决方案。我对每个答案都很满意。