QProgressBar: изменение цвета при сохранении стиля ОС - PullRequest
3 голосов
/ 12 июня 2019

Я знаю, что Qt по умолчанию использует стиль ОС для украшения QProgressBar.

Мне интересно, есть ли способ изменить цвет QProgressBar при сохранении стиля ОС.

Я попробовал несколько методов, как показано ниже.

Изменение палитры :

QPalette palette = myProgressBar->palette();
palette.setBrush(QPalette::Highlight, someColor); // setColor() did the same
myProgressBar->setPalette(palette);

Изменение стиля напрямую :

QPalette palette = myProgressBar->palette();
palette.setBrush(QPalette::Highlight, someColor); // setColor() did the same
myProgressBar->style()->polish(palette);

Но оба метода были полностью проигнорированы и ничего не изменилось.

Единственный способ изменить цвет QProgressBar - это установить таблицу стилей с помощью setStyleSheet(). Проблема в том, что он одновременно игнорирует стиль ОС.

Я думаю, можно приблизительно копировать стиль ОС в таблице стилей, но я не знаю, возможно ли напрямую применить стиль ОС и изменить только цветовую палитру.

Буду очень признателен за любой полезный ответ.


РЕДАКТИРОВАТЬ: ОС не исправлена. Я пытаюсь заставить его работать под Windows, но приложение может / будет работать под другой ОС (некоторый дистрибутив Linux).

1 Ответ

0 голосов
/ 12 июня 2019

Это зависит от того, какой стиль вы используете. В целом темы Qt (например, fusion) можно легко настроить, просто изменив палитру ( Обратите внимание, что разные стили могут использовать разные роли палитры ).

Однако для определенных стилей ОС (например, QWindowsVistaStyle) вы просто не можете это сделать. Причина в том, что реализация стиля игнорирует палитру и использует цвета из темы ОС.

Например, если вы посмотрите на реализацию на QWindowsXPStyle, вы найдете вызовы на GetThemeColor(), который возвращает цвет из ОС.

Эти специфические для ОС стили также не могут правильно использовать таблицы стилей, поэтому, если вы используете таблицу стилей, виджет откатится к стилю по умолчанию.

Я считаю, что ваше единственное решение - использовать QProxyStyle, но вам, возможно, придется переписать код, чтобы нарисовать части виджета, которые вы хотите настроить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...