Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: Alex Custov от Январь 09, 2014, 20:16



Название: Пересчёт глобального стиля для конкретного виджета
Отправлено: Alex Custov от Январь 09, 2014, 20:16
Если задан глобальный стиль для приложения, и в нём есть раскраска какого-то конкретного виджета по наличию в нём определённого property, то при смене значения этого property виджет никак не реагирует. Например:

Код
CSS
...
QLineEdit
{
   background-color: white;
}
 
QLineEdit[cool="true"]
{
   background-color: red;
}
...

В коде:

Код
C++ (Qt)
void Class::slotStyleOnReturnPress()
{
   ui->lineEdit->setProperty("cool", true); // сделаем его красным
   // WTF???
}

Решения:

1) Чтобы заставить виджет пересчитать глобальный стиль для себя, нужно задать ему фиктивный пустой стиль:

Код
C++ (Qt)
void Class::slotStyleOnReturnPress()
{
   ui->lineEdit->setProperty("cool", true);
   ui->lineEdit->setStyleSheet("/* */");
}

2) или принудительный пересчёт графики

Код
C++ (Qt)
void Class::slotStyleOnReturnPress()
{
   ui->lineEdit->style()->unpolish(ui->lineEdit);
   ui->lineEdit->style()->polish(ui->lineEdit);
   ui->lineEdit->update();
}