QLabel:设置文本和背景的颜色


179

如何设置a的文本和背景颜色QLabel

Answers:


272

最好的推荐方法是使用Qt样式表

要更改a的文本颜色和背景色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样式表。


我一直在使用setStyleSheet()方法,至少在Qt 4.4中,它最终会调用connect和Style Sheet中的内容,并导致内存使用增加。
戴夫·约翰森

我打开了一个有关内存使用增加的错误报告,可以在这里找到。
戴夫·约翰森

color属性无效。只有通过HTML,<font color="#FFFFFF">...</font>我才能将字体颜色设置为白色(在这种情况下为白色。)
Paulo Carvalho,

有没有一种方法可以指定用户桌面的默认(文本)颜色?使用color: ;“重置”似乎可以做到这一点,但这是一种好的做法,还是有更好的方法?
AstroFloyd

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的颜色角色部分


这是任何方式的最重要的一个元素(除了样式表。)
埃利亚胡Skoczylas

3
感谢您指出autoFillBackground是这里的关键问题。没有该设置,上面接受的答案将不起作用。
BSD

19

我添加此答案,因为我认为它对任何人都可能有用。

我进入了在绘画应用程序中为彩色显示标签设置RGBA颜色(即具有Alpha透明度的RGB颜色)的问题。

当我遇到第一个答案时,我无法设置RGBA颜色。我也尝试过类似的事情:

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

colorRGBA颜色在哪里。

因此,我的肮脏解决方案是扩展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。
Victor Polevoy '16年

13

设置与任何小部件的颜色有关的任何功能的最佳方法是使用QPalette

查找所需内容的最简单方法是打开Qt Designer并设置QLabel的调色板并检查生成的代码。


2
在设计器中,单击“表单->查看代码”以查看生成的代码。
alisami 2010年

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
尽管该代码是值得赞赏的,但应始终附有解释。这不必很长,但是可以预期。
peterh-恢复莫妮卡2015年

虽然此代码有效,但仍有一些确定的优化方法<code> QColor color = QColorDialog :: getColor(QColor(Qt :: white),this,tr(“ Select Color”); //使用静态函数选择颜色,初始值为白色</br> ui-> label-> setStyleSheet(QString(“ QLabel {background-color:%1; color:blue;}”“ + colcode +”; color:blue;}“).arg( color.name()); // color.name返回一个#RRGGBB格式的字符串</ code>
Scott Aron Bloom
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.