Изменение атрибута стиля виджета с помощью 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(),
Другие вопросы по тегам