Qt Plugins框架分析

概述

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


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


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

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

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

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

#! [0]
TEMPLATE    = lib
CONFIG     += plugin
QT         += widgets
HEADERS     = simplestyle.h \
              simplestyleplugin.h
SOURCES     = simplestyle.cpp \
              simplestyleplugin.cpp
TARGET      = simplestyleplugin
OTHER_FILES += simplestyle.json

simplestyleplugin.h插件工厂类

#include <QStylePlugin>

QT_BEGIN_NAMESPACE
class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值