点击上方蓝字可关注公众号,方便下次阅读。
本篇文章只能回答一半,如何创建扩展Qt自身的插件。
Qt提供了两种用于创建插件的API:
用于编写Qt自身扩展的高级API:自定义数据库驱动程序,图像格式,文本编解码器,自定义样式等。本次的例子就是自定义样式的例子。
用于扩展Qt应用程序的低级API。下次介绍。
例如,如果您要编写自定义QStyle子类并让Qt应用程序动态加载它,则可以使用更高级别的API。由于较高级别的API建立在较低级别的API之上,因此两者都有一些共同的问题。
高级API:扩展 Qt自身,编写扩展Qt本身的插件是通过将适当的插件基类继承为子类,实现一些功能并添加宏来实现的。
Qt官方文档:https://doc.qt.io/qt-5/plugins-howto.html。
程序环境:Ubuntu 14.04、 Qt5.5.1
使用Qt自带的例子方便入门。Qt5.5.1自带的例子无法运行出红色按钮的效果,所以做了微小改动。
1、打开Qt自带的工程
打开Qt Creator后,默认在【Welcome】选项,之后选择【Examples】,搜索【sty】,选择红色按钮那个。
2. 插件工程简介
SimpleStylePlugin类需继承父类QStylePlugin,并按照对应规则的接口进行实现,QStylePlugin类插件基类中的一个,属于样式基类。
在SimpleStylePlugin中create了 SimpleStyle,也就是我们自己要实现的样式。
SimpleStyle继承了QProxyStyle,重新实现了polish()。
void SimpleStyle::polish(QPalette &palette)
{
// palette.setColor(QPalette::Button, Qt::red); //无法运行出红色按钮的效果
palette = QPalette(QPalette::Button, Qt::blue);
}
3. 主程序简介
主程序中创建了窗口部件,这部分我们无需主要注意。我们要关注的是在主程序中如何使用我们新的样式。
QApplication::setStyle(QStyleFactory::create("simplestyle"));
4. 程序运行效果
插件生成路径:
5. 让其他工程使用自定义样式
将我们生成的插件拷贝到下面目录,Qr Designer在运行时会自动查找插件,如果找到插件则会自动加载。
下面是一个测试效果。此时无需我们再主程序中调用QApplication::setStyle(QStyleFactory::create("simplestyle")),样式也会自动被改变。
6、总结
主要就是运行了Qt自带的例子,方便初学者结合Qt自带的文档进行理解。
Qt的插件也可以理解为一种动态库,只不过只能是使用Qt来进行加载。
使用Qt开发的大型程序可以通过Qt的插件机制进行解耦。加载插件的宿主程序不关心插件的业务逻辑,只需按照对应接口调用即可;插件开发者可自己测试写的插件,方便维护。
欢迎关注公众号,方便下次阅读~