После инициализации моего приложения qt5 экземпляр QApplication предоставляется с настраиваемым классом стиля, который наследуется от QProxyStyle.
Этот класс перезаписывает функцию void polish(QPalette &palette), чтобы изменить общую цветовую схему для приложения.
Например:
#include "mycolormanager.h"
void MyStyle::polish(QPalette &palette) {
palette.setBrush(QPalette::Window, MyColorManager::getWindowColor());
palette.setColor(QPalette::WindowText, MyColorManager::getTextColor());
palette.setColor(QPalette::Disabled, QPalette::WindowText, MyColorManager::getDisabledTextColor());
palette.setColor(QPalette::Base, MyColorManager::getBaseColor());
// etc...
}
Однако я хочу разрешить пользователям настраивать цветовую схему приложения. После того, как пользователь выбрал новые цвета, мне нужно каким-то образом «повторно применить» стиль, чтобы функция могла снова запуститься и получить новые цвета из гипотетического класса «диспетчера цветов».
Как это сделать?





Вместо этого вы можете вызвать нижеприведенную статическую функцию и применить желаемую палитру.
void QApplication::setPalette(const QPalette &palette, const char *className = nullptr);
Создайте новый объект палитры после выбора новой цветовой схемы и просто передайте его вышеуказанной функции. Вы можете указать имя класса, если хотите, чтобы изменение применялось к конкретному виджету.
Да. Вы можете ....... Я имею в виду, что вы должны создать необходимый объект QPalette и передать его.
Ах, так я могу просто сделать это:
QApplication::setPalette(QPalette())?