QLabel: установить цвет текста и фона
Вопрос
Как я могу установить цвет текста и фона QLabel
?
Решение
Лучший и рекомендуемый способ - использовать QT стиль листа.
Чтобы изменить цвет текста и цвет фона QLabel
, вот что я бы сделал:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
Вы также можете избежать использования листов в стиле QT и изменить QPalette
Цвета вашего QLabel
, но вы можете получить разные результаты на разных платформах и / или стилях.
В качестве документации QT состояния:
Использование QPalrete не гарантируется работать для всех стилей, потому что авторы стиля ограничены руководящими принципами различных платформ и нативным тематическим двигателем.
Но вы могли бы сделать что-то вроде этого:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Но, как я уже сказал, я настоятельно рекомендую не использовать палитру и перейти на лист в стиле QT.
Другие советы
Вы можете использовать QPalette, однако вы должны установить setAutoFillBackground(true);
Включить цвет фона
QPalette sample_palette;
sample_palette.setColor(QPalette::Window, Qt::white);
sample_palette.setColor(QPalette::WindowText, Qt::blue);
sample_label->setAutoFillBackground(true);
sample_label->setPalette(sample_palette);
sample_label->setText("What ever text");
Он отлично работает на Windows и Ubuntu, я не играл с какой-либо другой ОС.
Примечание: пожалуйста, смотрите Qpalette., Раздел цветного роли для более подробной информации
Я добавляю этот ответ, потому что я думаю, что это может быть полезно никому.
Я вступаю в проблему настройки RGBA Цвета (то есть цвета RGB с альфа-значением для прозрачности) для ярлыков цветной дисплеи в моей покраске.
Как я наткнулся на первый ответ, я не смог установить цвет RGBA. Я также пробовал такие вещи, как:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
куда color
это цвет RGBA.
Итак, мое грязное решение было расширяться QLabel
и переопределить paintEvent()
Способ заполнения его ограничения прямого.
Сегодня я открыл qt-assistant
и прочитайте Список справочных свойств стиля. Отказ Аннонационально у него есть пример, который говорится: следующее:
QLineEdit { background-color: rgb(255, 0, 0) }
Это открывает мой разум, что делает что-то вроде кода ниже, в качестве примера:
myLabel= QLabel()
myLabel.setAutoFillBackground(True) # This is important!!
color = QtGui.QColor(233, 10, 150)
alpha = 140
values = "{r}, {g}, {b}, {a}".format(r = color.red(),
g = color.green(),
b = color.blue(),
a = alpha
)
myLabel.setStyleSheet("QLabel { background-color: rgba("+values+"); }")
Обратите внимание, что setAutoFillBackground()
настроить False
не сделает это работать.
С уважением,
Единственное, что сработало для меня, было HTML.
И я обнаружил, что это было гораздо проще, чем любой из программных подходов.
Следующий код изменяет цвет текста на основе параметра, передаваемого вызывающим абонентом.
enum {msg_info, msg_notify, msg_alert};
:
:
void bits::sendMessage(QString& line, int level)
{
QTextCursor cursor = ui->messages->textCursor();
QString alertHtml = "<font color=\"DeepPink\">";
QString notifyHtml = "<font color=\"Lime\">";
QString infoHtml = "<font color=\"Aqua\">";
QString endHtml = "</font><br>";
switch(level)
{
case msg_alert: line = alertHtml % line; break;
case msg_notify: line = notifyHtml % line; break;
case msg_info: line = infoHtml % line; break;
default: line = infoHtml % line; break;
}
line = line % endHtml;
ui->messages->insertHtml(line);
cursor.movePosition(QTextCursor::End);
ui->messages->setTextCursor(cursor);
}
Лучший способ установить любую функцию, касающуюся цветов любого виджета, предназначен для использования Qpalette..
И самый простой способ найти то, что вы ищете, - это открыть QT Designer и установить палитру QLABEL и проверьте сгенерированный код.
Этот работает идеально
QColorDialog *dialog = new QColorDialog(this);
QColor color= dialog->getColor();
QVariant variant= color;
QString colcode = variant.toString();
ui->label->setStyleSheet("QLabel { background-color :"+colcode+" ; color : blue; }");
getColor()
Метод возвращает выбранный цвет. Вы можете изменить цвет метки, используя stylesheet