После инициализации моего приложения 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);
Создайте новый объект палитры после выбора новой цветовой схемы и просто передайте его вышеупомянутой функции. Вы можете указать имя класса, если хотите, чтобы изменение применялось к определенному виджету.
Других решений пока нет …