Действительно ли стили таблицы Qt обрабатывают свойства _dynamic_?
Являются ли динамические свойства Qt настолько динамичными с таблицами стилей?
У меня есть основной пример из таблиц стилей и динамических свойств:
/*stylesheet:*/
*[field_mandatory="true"] { background-color: "yellow";}
И у меня это происходит во время выполнения где-то в коде:
/*code:*/
myWidget->setProperty("field_mandatory", field->isFilled() );
В пользовательском интерфейсе ничего не меняется, когда это свойство изменяется во время выполнения.
Есть ли у кого-нибудь идеи, что нужно сделать, чтобы обновить движок стилей Qt при изменении свойств или даже справиться с этими случаями?
Btw. Я использую Qt 4.4
Ответы
Ответ 1
Я нашел быстрый, хотя и немного хакерский способ обновления стиля виджета.
myWidget->style()->unpolish(myWidget);
myWidget->ensurePolished();
Выполнение этого после изменения свойств сохраняет корреляцию между данными свойств и пользовательским интерфейсом.
Ответ 2
Qt имеет следующую рекомендацию в FAQ:
style()->unpolish(theWidget);
style()->polish(theWidget);
Они также говорят, что вы можете reset таблицу стилей сделать следующее, но это дороже:
setStyleSheet(styleSheet());
Ответ 3
Следующее работает для меня, чтобы обеспечить правильный рестайлинг виджета:
myWidget->setStyle(QApplication::style())
Принуждение перерасчета таблиц стилей, предложенных mdcl, не помогло мне. Я использую Qt 4.5.3.
Ответ 4
Я тоже пробовал это, и когда я нашел следующий текст в документации, я сдался. См. Синтаксис таблицы стилей:
Внимание: если значение Qt изменения свойств после таблицы стилей, было бы необходимо, чтобы принудительно переформатируйте таблицу стилей. Один способ достижения этого - и снова установите его.