使用QStyle设置控件样式 QStyle封装了一套主题,只要Application或Widget使用了这个主题,就可以获得主题中所定义的样式
QApplication* application = nullptr;
QPushButton* button = nullptr;
QStyle* style = nullptr;
application->setStyle(style); //Application的style是全局的,对所有控件都生效
button->setStyle(style); //Widget可以在ApplicationStyle的基础上,再设置自己的特殊样式
通过QStyleFactory使用内置QStyle QStyle的创建需要继承QProxyStyle,然后自定义绘制细节,比较复杂 这个属于自定义QStyle的范畴,属于高阶知识,有兴趣的可以自学 简单使用的话,Qt已经为我们提供了若干内置样式,具体种类和操作系统有关,我们只需要通过QStyleFactory即可获取这些内置样式,直接使用
//获取所有内置样式
QStringList styleList = QStyleFactory::keys();
//创建一个内置样式
QStyle* style = QStyleFactory::create("Fusion");
使用QSS设置控件样式 同QStyle一样,StyleSheet既可以设置给Application,也可以设置给Widget 设置给Application则适用于所有控件,Widget可以在ApplicationStyleSheet的基础上,设置自己的特殊StyleSheet
QApplication app;
QPushButton button;
app.setStyleSheet("*{background:red;}");
button->setStyleSheet("*{background:yellow;}");
封装QSS资源文件 Qt设置StyleSheet的方法是通过直接设置样式字符串来完成的 显然,这样做有一个明显的缺陷,那就是在代码中拼接qss样式文本实在太麻烦了,也不方便阅读修改 这个问题很容易解决,只需要将qss样式文本写到资源文件中,代码执行时,将资源文件中的文本读出来即可 再进一步,我们封装一个loadStyleSheetFromResource方法,一行代码即可完成读取和设置样式
common.qss
QPushButton {
background-color: black;
color: white;
font-style: bold;
font-size: 16px;
font-family: 微软雅黑;
border-top-color: deepskyblue;
border-top-width: 5px;
border-top-style: solid;
}
qss.h
class QSS {
public:
static void loadStyleSheetFromResource(QString styleSheetSource, QApplication *injectionTarget) {
QFile file(styleSheetSource);
file.open(QFile::ReadOnly);
QByteArray qss = file.readAll();
injectionTarget->setStyleSheet(qss);
file.close();
}
static void loadStyleSheetFromResource(QString styleSheetSource, QWidget *injectionTarget) {
QFile file(styleSheetSource);
file.open(QFile::ReadOnly);
QByteArray qss = file.readAll();
injectionTarget->setStyleSheet(qss);
file.close();
}
};
main.cpp
QApplication app;
QSS::loadStyleSheetFromResource(":/qss/common.qss", &app);
QSS开发工具 Qt本身没有为QSS提供很好的文档和代码提示,如果我们想方便地进行QSS开发,就必须借助第三方的开发根据 这里提供两个非常好用,同时也是不可多得的QSS开发工具 Kinetic Wing IDE:QSS代码自动补全和提示,界面美观,操作舒适 QSS Editor:QSS效果预览,本身没有自动补全和提示功能,建议配合Kinetic Wing IDE使用 QSS官方使用文档:Qt5官方发布的关于StyleSheet的使用文档