QLabel: установить цвет текста и фона - программирование

QLabel: установить цвет текста и фона

Как установить цвет текста и фона QLabel?

4b9b3361

Ответ 1

Лучшим и рекомендуемым способом является использование Qt Style Sheet.

Чтобы изменить цвет текста и цвет фона QLabel, вот что я сделал бы:

QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");

Вы также можете избежать использования таблиц стилей Qt и изменить цвета QPalette вашего QLabel, но вы можете получить разные результаты на разных платформах и/или стилях.

Как указано в документации Qt:

Использование QPalette не гарантируется для всех стилей, поскольку авторы стилей ограничены рекомендациями разных платформ и движком родных тем.

Но вы можете сделать что-то вроде этого:

 QPalette palette = ui->pLabel->palette();
 palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
 palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
 ui->pLabel->setPalette(palette);

Но, как я уже сказал, я настоятельно рекомендую не использовать палитру и перейти на лист стиля Qt.

Ответ 2

Вы можете использовать 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, цветную роль.

Ответ 3

Я добавляю этот ответ, потому что я думаю, что он может быть полезен для всех.

Я вхожу в проблему установки цветов RGBA (то есть цвет RGB с альфа-значением для прозрачности) для ярлыков цветного дисплея в моем приложении для рисования.

Когда я наткнулся на первый ответ, мне не удалось установить цвет RGBA. Я также пробовал такие вещи, как:

myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())

где color - цвет RGBA.

Итак, моим грязным решением было расширение QLabel и переопределение метода paintEvent(), заполняющего его ограничивающий прямоугольник.

Сегодня я открываю qt-assistant и читаю список свойств свойств стиля. К счастью, в нем есть пример, в котором указано следующее:

QLineEdit { background-color: rgb(255, 0, 0) }

Thats открывает мой разум, делая что-то вроде кода ниже, в качестве примера:

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, не будет работать.

Привет,

Ответ 4

Лучший способ установить любую особенность цветов любого виджета - использовать QPalette.

И самый простой способ найти то, что вы ищете, - открыть Qt Designer и установить палитру QLabel и проверить сгенерированный код.

Ответ 5

Единственная вещь, которая работала для меня, была 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);
}

Ответ 6

Этот режим отлично работает

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