Как добавить стиль через 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}");