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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разные цвета для QLabel'ов с помощью QStyle.  (Прочитано 5110 раз)
dumz
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« : Ноябрь 18, 2021, 23:07 »

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

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

Может кто-нибудь сталкивался с такой задачей? Есть другие способы?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 19, 2021, 09:15 »

Покрасить, можно за счёт задания в лэйблах html текста
Код
HTML
<font color="red">TextLabel</font>

Может это облегчит поиск решения
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Ноябрь 19, 2021, 10:42 »

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

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
dumz
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #3 : Ноябрь 20, 2021, 01:57 »

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

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

Я не отвергаю ни один из вариантов, а пытаюсь определить оптимальный путь решения.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Ноябрь 21, 2021, 21:59 »

...которая каскадно меняет стиль всего приложения, вызывая подобные функции у детей главного окна, которые, в свою очередь, делают тоже самое, и так вплоть до отдельных элементов.
Это зачем? Почему это не сделать в одном, главном окне?  В замешательстве
Это нормально до тех пор, пока вдруг не появится необходимость "немного переписать" цвета какого-то из стилей, или добавить новый стиль, ведь в этом случае придётся ползать по всем файлам, чтобы это осуществить.
Если появится такая необходимость, вам уже ничего не поможет. Для того, чтобы управлять большим количеством чего-либо, надо сначала это "что-либо" организовать соответствующим образом при проектировании (свойства какие-нибудь, имена и т.д.).
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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