繁体   English   中英

QLabel Qt/c++文本的渐变色

[英]Gradient color for text of QLabel Qt/c++

我试图为 QLabel 文本设置渐变颜色。 我正在尝试使用 setStyleSheet function 但它不起作用。 阅读了这篇文章,但仍然无法获得有效的解决方案。

这是我的代码

void MyClass::setTitle(const QString& text)
{
    m_text = text;
    m_titleText->setText(text);
    QFont font = m_titleText->font();
    font.setPointSize(12);
    m_titleText->setFont(font);
    m_titleText->setStyleSheet("color: qlineargradient(x1: 0, y1: 0,    x2: 0, y2: 1,    #3d5afe: 0 #66e, stop: 1 #fd3e7f);")
}

这个问题有什么解决办法吗? 提前谢谢。

你可以试试这个。

   void MyClass::setTitle(const QString& text)
    {
        m_text = text;
        m_titleText->setText(text);
        QFont font = m_titleText->font();
        font.setPointSize(12);
        m_titleText->setFont(font);
        QPalette labelPal;
        QLinearGradient colorGradient = QLinearGradient(0, 0, m_titleText->width(), 0);
        colorGradient.setSpread(QGradient::RepeatSpread);
        colorGradient.setColorAt(0, QColor("#3d5afe"));
        colorGradient.setColorAt(1, QColor("#fd3e7f"));
        QBrush brush(colorGradient);
        labelPal.setBrush(QPalette::ColorRole::Text, brush);
    
        m_titleText->setPalette(labelPal);
        m_titleText->setForegroundRole(QPalette::Text);
    }

您使用了无效的语法,但 QSS 解析器无法确定(或者,至少,没有给出任何警告),所以它只是忽略渐变并使用默认的调色板颜色作为文本。
问题是您缺少stop定义并改用颜色。

改成:

    m_titleText->setStyleSheet("color: qlineargradient(x1: 0, y1: 0,    x2: 0, y2: 1,    stop: 0 #66e, stop: 1 #fd3e7f);")

请注意,同样可以使用带有 QLinearGradient(使用 object 边界模式)设置为WindowText角色的画笔的 QPalette 来完成。

 ui->label->setStyleSheet(
    "* {color: qlineargradient(spread:pad, x1:0 y1:0, x2:1 y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));"
    "background: qlineargradient( x1:0 y1:0, x2:1 y2:0, stop:0 cyan, stop:1 blue);}");

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM