Qt Plugins框架分析

来源:互联网 发布:网络热血传奇沙巴克 编辑:程序博客网 时间:2024/06/06 12:30

概述

采用自顶向下的方法,先来看看怎么使用,然后再分析是怎么实现的。


创建插件的方式有两种:
* 上层API,用来扩展Qt库的功能,例如增加数据库驱动、图片格式的支持、以及自定义应用程序风格。
* 底层API,用来扩展Qt应用程序的功能。


使用上层API编写Qt扩展(自定义风格)

编写一个自定义风格的插件,Qt示例。
文件清单

plugin.prosimplestyle.cpp          插件的实现simplestyle.hsimplestyle.json         描述关键字simplestyleplugin.cpp    简单工厂,根据指定的关键字,生成相应的对象simplestyleplugin.h

plugin.pro其中,这一行是自己加行去的OTHER_FILES += simplestyle.json,方便在QtCreator中查看。

#! [0]TEMPLATE    = libCONFIG     += pluginQT         += widgetsHEADERS     = simplestyle.h \              simplestyleplugin.hSOURCES     = simplestyle.cpp \              simplestyleplugin.cppTARGET      = simplestylepluginOTHER_FILES += simplestyle.json

simplestyleplugin.h插件工厂类

#include <QStylePlugin>QT_BEGIN_NAMESPACEclass QStringList;class QStyle;QT_END_NAMESPACE//! [0]class SimpleStylePlugin : public QStylePlugin{    Q_OBJECT    //由moc生成meta信息,Qt库获取的key的时候使用的是simplestyle.json文件里面的关键字。    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "simplestyle.json")public:    SimpleStylePlugin() {}    //QStringList keys() const; //这个函数是没有作用的,大概是老版本的Qt使用这个函数来获取关键字,示例程序还没有修改吧。    QStyle *create(const QString &key) Q_DECL_OVERRIDE;};//! [0]

simplestyleplugin.cpp插件工厂类的实现

#include <QtWidgets>#include "simplestyleplugin.h"#include "simplestyle.h"//! [1]//简单工厂,根据关键字,来生成相应的对象,可以实现在一个插件内支持多种风格。QStyle *SimpleStylePlugin::create(const QString &key){    if (key.toLower() == "simplestyle")        return new SimpleStyle;    return 0;}//! [1]

simplestyle.hsimplestyle.cpp,是这个简单风格的实现。

#include <QtWidgets>#include "simplestyle.h"//把QPushButton的背景设置为红色void SimpleStyle::polish(QPalette &palette){    palette.setBrush(QPalette::Button, Qt::red);}

simplestyle.json用来描述支持的风格名称,可以有多个,以分号隔开。

{    "Keys": [ "simplestyle" ]}

测试的时候,把生成的libsimplestyleplugin.so复制到安装目录下的plugins/styles目录里,或者用qt.conf来指定插件目录路径。

0 0
原创粉丝点击