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), Но что, если я хочу покрасить рамку, как в моем примере выше? Я не нашел решения для этого до сих пор. Я рад каждому ответу.

Другие вопросы по тегам