【零基础学QT】【043】Qt界面样式定制:QStyle和QSS

使用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的使用文档

发布了442 篇原创文章 · 获赞 45 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/u013718730/article/details/103952569