#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. Привет, спасибо за ваш ответ, на изображении я вижу градиентный цвет для фона, но не для текста. Ваш начальный цвет градиента черный, но я не видел черного цвета в тексте. У меня была такая же проблема, цвет текста всегда является конечным цветом градиента.