Изменение атрибута стиля виджета с помощью qproperties
Можно ли изменить один конкретный атрибут в таблице стилей без повторного вызова setStyleSheet? Некоторые простые случаи я решил с помощью селекторов атрибутов (похожих на CSS) и пользовательских свойств, которые определяют "тип" или "состояние" виджета.
Допустим, мне нужно изменить ширину границы во время выполнения. Для этого мне нужно изменить атрибут "граница", и я определил пользовательское свойство borderWidth типа int. CSS поддерживает псевдофункцию attr(), которая может использоваться для вычисления значения одного атрибута из другого. Очевидно, он не работает с таблицей стилей Qt, например
QTablo [state="3"] {
border: attr(qproperty-borderWidth);
}
после unpolish();polish();update(); рутина не вижу никаких изменений. Есть ли обходной путь для этого, кроме как установить стиль?
1 ответ
Обратите внимание, что Qt поддерживает только подмножество CSS2, кажется, что attr() впервые упоминается в CSS2.1.
Вы могли бы:
- Использовать
QFrame
и измените его свойства вместо использования таблицы стилей. - Создайте таблицу стилей во время выполнения и назначьте ее. Что-то вроде
QString("border-width: %1px;").arg(borderWidth);
, - Используйте кастом
QProxyStyle
который возвращает правильное значение вpixelMetric()
,