Russian Qt Forum
Май 01, 2024, 20:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пересчёт глобального стиля для конкретного виджета  (Прочитано 2249 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Январь 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();
}
« Последнее редактирование: Январь 10, 2014, 00:21 от Alex Custov » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 22.