QLabel: встановлення кольору тексту та фону


Відповіді:


272

Найкращий і рекомендований спосіб - це використання таблиці стилів Qt .

Щоб змінити колір тексту та колір тла 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 Style Sheet.


Я використовував метод setStyleSheet (), і, принаймні, у Qt 4.4, він закінчує виклик connect і в матеріалах таблиці стилів і спричиняє збільшення використання пам'яті.
Дейв Йохансен

Я відкрив звіт про помилку щодо збільшення використання пам'яті, який можна знайти тут .
Дейв Йохансен

colorАтрибут неефективний. Лише за допомогою HTML <font color="#FFFFFF">...</font>я зміг встановити колір шрифту (в цьому випадку білий колір.
Пауло Карвальо,

Чи є спосіб вказати стандартний (текстовий) колір робочого столу користувача? Використання color: ;як "скидання", здається, це робить, але чи це хороша практика, чи є кращий метод?
АстроФлойд

38

Ви можете використовувати 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 , розділ кольорових ролей для отримання більш детальної інформації


Це найважливіший єдиний елемент будь-якого підходу (крім стилю таблиць.)
Eliyahu Skoczylas

3
Дякуємо, що вказали, що autoFillBackground є ключовою проблемою тут. Прийнята відповідь вище не працює без цього налаштування.
BSD

20

Я додаю цю відповідь, тому що думаю, що вона може бути корисною для будь-кого.

Я вступаю в проблему встановлення кольорів RGBA (тобто кольору RGB із значенням Alpha для прозорості) для міток кольорового відображення в моїй програмі малювання.

Коли я натрапив на першу відповідь, мені не вдалося встановити колір 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його не змусить його працювати.

З повагою,


14

ТІЛЬКИ, що працювало для мене, було 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, ні таблиці стилів, що дуже дратує!
я нічого не знаю

Я вважаю за краще такий спосіб, оскільки він також дозволяє помістити деякі тендітні речі всередині <font/>тегу (і це щось більш звичне для HTML-людей: D), а не просто колір, отже, це дає вам більшу гнучкість.
rbaleksandar

Таблиці стилів @iknownothing працюють через QPalette ... Все використовує QPalette.
Віктор Полевий

13

Найкращий спосіб встановити будь-яку особливість стосовно кольорів будь-якого віджета - це використовувати QPalette .

І найпростіший спосіб знайти те, що ви шукаєте - це відкрити Qt Designer і встановити палітру QLabel і перевірити створений код.


2
У дизайнері натисніть «Форма-> Переглянути код», щоб побачити створений код.
алісамі

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


1
Хоча код цінується, він завжди повинен мати супровідне пояснення. Це не повинно бути довгим, але очікується.
петерх

Хоча цей код працює, є деякі оптимізації визначення <code> QColor color = QColorDialog :: getColor (QColor (Qt: білий), this, tr ("Виберіть колір"); // використовуйте статичну функцію для вибору кольору, початкове значення - білий </br> ui-> label-> setStyleSheet (QString ("QLabel {background-color:% 1; color: blue;}" "+ colcode +"; color: blue;} ") .arg ( color.name ()); // color.name повертає рядок у форматі #RRGGBB </code>
Скотт Арон Блум
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.