Как добавить стиль через setStyleSheet() без потери оригинального стиля в Qt?

Я могу использовать setStyleSheet() для установки стиля в Qt. Но я столкнулся с проблемой, когда использовал setStyleSheet() дважды, когда первые стили потерялись, которые устанавливаются при первом использовании setStyleSheet().

Например,

setStyleSheet("QLabel{color:red;}");

............

setStyleSheet("QLabel{border-image:url(……)}")

Когда я устанавливаю border-image, свойство красного цвета теряется.

Я пытался решить это с помощью

setStyleSheet(styleSheet()+QString("QLabel{border-image:url(……)}"));

но это было то же самое, что существовало только свойство border-image.

Я должен добавить каждое свойство стиля, когда я использую setStyleSheet(), хотя это я и устанавливал раньше.

Спасибо за терпение моего плохого письменного английского. Любые советы будут оценены.

2 ответа

Решение

Вы можете установить таблицы стилей без тега QLabel:

setStyleSheet("color:red;");

После установки одного свойства таблицы стилей вы можете добавить другое свойство, например:

setStyleSheet( styleSheet().append(QString("border-image:url(……);")) );

Это ответ на ваш комментарий о принятом ответе.

Вы можете предотвратить перезапись свойств таблиц стилей, установив значения констант для родительских (что позволяет также не изменять динамически стиль родителя). Устанавливайте только значения, которые вы изменяете в C++, на дочерний элемент.

parentWidget->setStyleSheet( "QLabel#yourLabel { color:red; }" );
yourLabel->setStyleSheet( "QLabel { border-image:url(...) };" );

Это сохранит все родительские свойства, которые были установлены в виджете при изменении таблицы стилей виджета.

Кроме того, это исключает случай очень большой строки, что возможно в принятом ответе. Частые изменения будут неэффективно добавлять строку с ранее определенными стилями, которые не будут использоваться.

Используя двойной столбец для второй записи.

ui->pushButton_2->setStyleSheet(
            "QPushButton{background-color:red;color:white}\
             QPushButton::hover{color:black}");
Другие вопросы по тегам