Відповіді:
Найкращий і рекомендований спосіб - це використання таблиці стилів 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.
color
Атрибут неефективний. Лише за допомогою HTML <font color="#FFFFFF">...</font>
я зміг встановити колір шрифту (в цьому випадку білий колір.
color: ;
як "скидання", здається, це робить, але чи це хороша практика, чи є кращий метод?
Ви можете використовувати 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 із значенням 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
його не змусить його працювати.
З повагою,
ТІЛЬКИ, що працювало для мене, було 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);
}
<font/>
тегу (і це щось більш звичне для HTML-людей: D), а не просто колір, отже, це дає вам більшу гнучкість.
Найкращий спосіб встановити будь-яку особливість стосовно кольорів будь-якого віджета - це використовувати 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