Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dumz от Ноябрь 18, 2021, 23:07



Название: Разные цвета для QLabel'ов с помощью QStyle.
Отправлено: dumz от Ноябрь 18, 2021, 23:07
Создаю графический интерфейс по готовому дизайну, есть необходимость, чтобы были ночная и дневная темы. Внешний вид большинства виджетов разительно отличается от стандартного Кьютишного, но главное, используются разные цвета для Label'ов. Если бы не было необходимости менять тему, то можно было бы ограничиться переписыванием paintEvent'ов, либо просто CSS использовать. Проблема в том, что в этом случае придётся в каждый виджет кидать какой-то сигнал об изменении стиля (напомню, что виджеты нестандартные и в разных местах могут выглядеть по разному, так что просто применить общую таблицу ко всему приложению не катит).

Исходя из этого, решил пойти путём создание своих 2-х стилей, которые будут отличаться только палитрой. Но тут встаёт проблема, у QLabel есть только одна роль для невыделенного текста, а именно WindowText. То есть я не могу таким образом задать разные цвета. У меня напрашивается только один вариант, это создавать для каждого цвета подкласс QLabel, и уже для них отдельно писать polish(QWidget *), ну а drawComplex у них обычный будет.

Может кто-нибудь сталкивался с такой задачей? Есть другие способы?


Название: Re: Разные цвета для QLabel'ов с помощью QStyle.
Отправлено: __Heaven__ от Ноябрь 19, 2021, 09:15
Покрасить, можно за счёт задания в лэйблах html текста
Код
HTML
<font color="red">TextLabel</font>

Может это облегчит поиск решения


Название: Re: Разные цвета для QLabel'ов с помощью QStyle.
Отправлено: sergek от Ноябрь 19, 2021, 10:42
Я не понял, почему вы отказались от использования стилей CSS. Вы можете управлять оформлением каждого элемента. А как их объединить в группы, зависит от задачи и вашей фантазии:
Код
C++ (Qt)
   label->setStyleSheet("QLabel {color: green; background: WhiteSmoke;}");
   label_2->setStyleSheet("QLabel {color: #0000FF; background: #9ACD32;}");
 
 


Название: Re: Разные цвета для QLabel'ов с помощью QStyle.
Отправлено: dumz от Ноябрь 20, 2021, 01:57
Я не понял, почему вы отказались от использования стилей CSS. Вы можете управлять оформлением каждого элемента. А как их объединить в группы, зависит от задачи и вашей фантазии:
Код
C++ (Qt)
   label->setStyleSheet("QLabel {color: green; background: WhiteSmoke;}");
   label_2->setStyleSheet("QLabel {color: #0000FF; background: #9ACD32;}");
 
 

Не то, чтобы я совсем отказался, но тогда абсолютно для всех классов, в которых расположены виджеты нужно писать функцию изменения shyleSheet'а, и по сигналу виджета, который отвечает за изменение (например комбобокс со стилями), вызывать некоторую функцию, которая каскадно меняет стиль всего приложения, вызывая подобные функции у детей главного окна, которые, в свою очередь, делают тоже самое, и так вплоть до отдельных элементов. Это нормально до тех пор, пока вдруг не появится необходимость "немного переписать" цвета какого-то из стилей, или добавить новый стиль, ведь в этом случае придётся ползать по всем файлам, чтобы это осуществить.

Я не отвергаю ни один из вариантов, а пытаюсь определить оптимальный путь решения.


Название: Re: Разные цвета для QLabel'ов с помощью QStyle.
Отправлено: sergek от Ноябрь 21, 2021, 21:59
...которая каскадно меняет стиль всего приложения, вызывая подобные функции у детей главного окна, которые, в свою очередь, делают тоже самое, и так вплоть до отдельных элементов.
Это зачем? Почему это не сделать в одном, главном окне?  :-\
Это нормально до тех пор, пока вдруг не появится необходимость "немного переписать" цвета какого-то из стилей, или добавить новый стиль, ведь в этом случае придётся ползать по всем файлам, чтобы это осуществить.
Если появится такая необходимость, вам уже ничего не поможет. Для того, чтобы управлять большим количеством чего-либо, надо сначала это "что-либо" организовать соответствующим образом при проектировании (свойства какие-нибудь, имена и т.д.).