如何"Re-Polish" QApplication同风格?
How to "Re-Polish" QApplication with Same Style?
在我的 qt5 应用程序初始化时,QApplication 实例提供了一个自定义样式 class,它继承自 QProxyStyle。
此 class 覆盖 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...
}
但是,我希望允许用户自定义应用程序的配色方案。一旦用户选择了新颜色,我需要以某种方式 "reapply" 样式,因此函数可以再次 运行 并从假设的 "color manager" class 中获取新颜色。
如何做到这一点?
相反,您可以调用下面的静态函数并应用所需的调色板。
void QApplication::setPalette(const QPalette &palette, const char *className = nullptr);
选择新的配色方案后创建新的调色板对象,并将其传递给上述函数。如果您希望更改应用于特定的小部件,您可以指定类名。
在我的 qt5 应用程序初始化时,QApplication 实例提供了一个自定义样式 class,它继承自 QProxyStyle。
此 class 覆盖 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...
}
但是,我希望允许用户自定义应用程序的配色方案。一旦用户选择了新颜色,我需要以某种方式 "reapply" 样式,因此函数可以再次 运行 并从假设的 "color manager" class 中获取新颜色。
如何做到这一点?
相反,您可以调用下面的静态函数并应用所需的调色板。
void QApplication::setPalette(const QPalette &palette, const char *className = nullptr);
选择新的配色方案后创建新的调色板对象,并将其传递给上述函数。如果您希望更改应用于特定的小部件,您可以指定类名。