Qt использовать цвет палитры в таблице стилей
enter code here
В Qt вы обычно устанавливаете цвет QWidget
с QPalette
,
Пример:
QPalette palette = new QPalette();
palette.setBrush(QPalette::Base, this->palette().backgorund());
QLineEdit *line = new QLineEdit();
line->setPalette(palette);
Теперь у меня есть небольшая проблема. Невозможно изменить цвет границы QLineEdit с помощью QPalette
, Это означает, что я должен использовать QStyleSheet
,
Пример:
QLineEdit *line = new QLineEdit();
line.setStyleSheet("border: 1px solid green");
Но теперь я не могу установить базовый цвет QLineEdit с помощью QPalette
потому что цвет фона 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");
Но невозможно определить background-color
QLineEdit в таблице стилей, потому что background-color
из QLineEdit
должно быть динамически.
Мой вопрос: как подключить цвет фона QLineEdit
с QPalette::base
определить background-color
из QLineEdit
динамически с QPalette
?
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);
В качестве альтернативы:
line->setStyleSheet(QStringLiteral("
border: 1px solid green;
background-color: palette(base);
"));
Ссылка: http://doc.qt.io/qt-5/stylesheet-reference.html
С помощью PaletteRole
также позволяет CSS быть в отдельном файле / источнике.
Я нашел решение для моей ситуации. Поскольку я хочу только замаскировать границу и не хочу ее окрашивать, я могу использовать метод QLineEdit::setFrame(bool)
, Но что, если я хочу покрасить рамку, как в моем примере выше? Я не нашел решения для этого до сих пор. Я рад каждому ответу.