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.h
和simplestyle.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
- Qt Plugins框架分析
- X-Plugins框架使用
- Qt Multimedia::QMediaPlayer框架源码分析
- Unreal4+Qt+Plugins(unrealcv)安装教程
- plugins
- Plugins
- QT如何创建和使用Qt Plugins (插件)
- WhatWeb源码分析之lib/plugins.rb
- 发布Qt程序时别忘了带上plugins(codecs等)
- 如何创建Qt Plugins (插件)之 使用低级api
- Mybatis3源码分析(18)-插件(plugins)拦截器
- Mybatis源码分析之插件(plugins)源码详解
- 【QT】Qt QFlags源码分析
- Ogre3D嵌入Qt框架
- Ogre3D嵌入Qt框架
- Qt单元测试框架
- Qt同步框架
- QT状态机框架
- 【技术】左右晃动
- springMVC+hibernate+maven整合开发
- 几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
- 应用程序添加窗口时注册InputChannel源码分析
- 内存对齐的规则以及作用
- Qt Plugins框架分析
- Android不同APP之间共享数据的方式
- (广度优先搜索第一课)迷宫的最短路径 - BFS
- Objective-c程序设计Ch04-10.
- MySQL学习笔记2(操作数据库)
- Objective-C 和 Core Foundation 对象相互转换内存管理
- Android之SurfaceView使用总结
- UIWebView 实现自适应高度
- 算法导论学习笔记(一)排序算法之计数排序