Градиентный цвет для текста QLabel Qt / c

#c #qt #qtstylesheets

#c #qt #qtstylesheets

Вопрос:

Я пытаюсь установить цвет градиента для текста QLabel. Я пытаюсь использовать функцию setStyleSheet, но она не работает. Я прочитал эту статью, но все еще не могу найти рабочее решение.

это мой код

 void MyClass::setTitle(const QStringamp; 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);")
}
 

Есть ли какое-либо решение этой проблемы?
Заранее спасибо.

Ответ №1:

Вы можете попробовать это.

    void MyClass::setTitle(const QStringamp; 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);
    }
 

Комментарии:

1. Спасибо, чувак, это потрясающе, я попробовал, и это работает.

Ответ №2:

Вы используете недопустимый синтаксис, но анализатор QSS не может определить это (или, по крайней мере, не выдает никаких предупреждений об этом), поэтому он просто игнорирует градиент и использует цвет палитры по умолчанию для текста.
Проблема в том, что вы упустили stop определение и вместо этого использовали цвет.

Изменить на:

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

Обратите внимание, что то же самое можно также сделать с помощью QPalette с QLinearGradient (с режимом ограничения объекта), установленным в качестве кисти для WindowText роли.

Ответ №3:

  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);}");
 

введите описание изображения здесь

Комментарии:

1. Привет, спасибо за ваш ответ, на изображении я вижу градиентный цвет для фона, но не для текста. Ваш начальный цвет градиента черный, но я не видел черного цвета в тексте. У меня была такая же проблема, цвет текста всегда является конечным цветом градиента.