QPalette progressBar
Добрый день!
Подскажите пожалуйста, столкнулся с проблемой смены цвета прогресс бара через QPalette::Highlight.
В MainWindow считается переменная температуры девайса. Результат вычисления этой переменной я отправляю на виджет, где лежит лэйбл и прогресс бар, лейбл без проблем принимает числовое значение той переменной. А вот прогресс бар свой цвет не меняет.
Вот полный код процедуры присвоение значений на лэйбл и бар:
void station::updateTemp(double temp) { ui->label_7->setText(QString::number(temp, 'f', 0) + " °С"); ui->EngineBar_7->setValue(temp); QPalette paletteEngine7 = ui->EngineBar_7->palette(); if ((temp >= -50) && (temp <= 0)) { paletteEngine7.setColor(QPalette::Highlight, QColor (255, 36, 0, 255)); ui->EngineBar_7->setPalette(paletteEngine7); } else if ((temp > 0) && (temp <= 70 )) { paletteEngine7.setColor(QPalette::Highlight, QColor (13, 191, 0, 255)); ui->EngineBar_7->setPalette(paletteEngine7); } else if ((temp > 70) && (temp <=90 )) { paletteEngine7.setColor(QPalette::Highlight, QColor (255, 243, 67, 255)); ui->EngineBar_7->setPalette(paletteEngine7); } else if ((temp > 90) && (temp <= 120)) { paletteEngine7.setColor(QPalette::Highlight, QColor (255, 36, 0, 255)); ui->EngineBar_7->setPalette(paletteEngine7); } }
Подскажите что неправильно я написал. Т.к. бар оставляет свой дефолтный цвет, хотя шкала в зависимости от значение меняет свое положение.
Также этот алгоритм смены цвета я пробовал вписать в конструктор этого виджета, но там палитра не видит переменную температуры и меняет свой цвет только при ручном вводе значения setValue.

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Unknown akadamn
- 24 января 2025 г. 17:14
Qt - Тест 001. Сигналы и слоты
- Результат:84баллов,
- Очки рейтинга4
- Unknown akadamn
- 24 января 2025 г. 16:22
Qt - Тест 001. Сигналы и слоты
- Результат:42баллов,
- Очки рейтинга-8


Может лучше через style sheet?
https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar
Согласен с Михаилом. Дело в том, что QPalette очень сильно зависит от системных стилей и для разных ОС игнорируются некоторые настройки QPalette.
Тогда как style sheet грубо переопределяет стилевое оформление.
И вот это возможно заинтересует:
https://wiki.qt.io/Dynamic_Properties_and_Stylesheets
Благодарю за ответ, но и этим способом я пытался изменить его цвет. Бар также игнорировал styleSheet и оставался дефолтным. Вероятно я допустил ошибку на тот момент. Не могли Вы показать пример применения на конкретный прогресс бар такой таблицы стилей?
Вот код
Вот результат
Не забываем также, что все стили можно описать в отдельном .qss файле. И использовать dynamic properties для динамического поведения.
И вот опять, цвет остался дефолтным синим, хотя при ручном вводе значений шкала также двигается, цвет в упор не меняет.
На скриншоте видно что бар так и остался синим, игнорируя styleSheet. Остальные бары зеленые, т.к. они на данный момент не активны и для них просто настроена палитра.
Я так понимаю, таблицу стилей Вы задаете в конструкторе, но шкала бара должна зависить от переменной, т.е. в разные диапазоны разный цвет. Каким образом такое условие можно реализовать в конструкторе? ведь там он не принимает переменные. Так же выше я прикрепил скриншот, запущенной программы, к сожалению не сработало(
Вы можете написать другой конструктор, с необходимыми аргументами. Конструкторов может быть сколько угодно.
Спасибо! Этого я не знал. Но все же вопрос, даже если я создам новый конструктор, как в него засунуть эту дурацкую переменную температуры?
То что вы хотите сделать и есть динамическое свойство стиля. Возможно я отправлю пример чуть позже.
За пример буду очень благодарен, т.к. я новичок и с подобным пока не работал.
Ну так... чисто для примера, чтобы показать как это работет. Все стили лучше хранить в отдельном .qss файле. Здесь представлен qss синтаксис: https://doc.qt.io/qt-5/stylesheet-syntax.html
Благодарю! Пойду читать всю эту документацию, чтобы понять, как это вообще работает и дальше мучать свой прогресс бар.