Qt提供了一个简单地插件接口,可以轻松地生成作为独立组件的定制数据库驱动、图象格式、文本编解码器(text codec)、风格(style)和部件。

警告:Qt 3.0.5对插件的一些方面做了改变,具体涉及到装载、路径操作和库版本。这些变化的结果是,Qt 3.0.4及以前版本编译的插件都不能用于Qt 3.0.5及以后版本。

写一个插件通过以下方式完成:写适当的插件基类的子类,实现几个函数,再添加一个宏。

一共有五个插件基类。派生的插件缺省保存于标准插件目录。

基类缺省路径

QImageFormatPlugin $QTDIR/plugins/imageformats
QSqlDriverPlugin    $QTDIR/plugins/sqldrivers
QStylePlugin    $QTDIR/plugins/styles
QTextCodecPlugin    $QTDIR/plugins/codecs
QWidgetPlugin   $QTDIR/plugins/designer

假设你有一个新的风格类,叫做'MyStyle',你要把它做成插件的形式。需要的代码直截了当:

    class MyStylePlugin : public QStylePlugin{public:MyStylePlugin() {}~MyStylePlugin() {}QStringList keys() const { return QStringList() << "MyStyle"; }QStyle* create( const QString& key ) { if ( key == "MyStyle" ) return new MyStyle;return 0;}};

Q_EXPORT_PLUGIN( MyStylePlugin )
构造器和解构器不需要做什么,空的就可以。有两个虚函数一定要实现。第一个是keys(),它返回在插件中实现的类的一个字符串列表。(我们在上面的例子中刚刚实现了一个类。)第二个是一个函数,它返回所要的类的一个对象(或者0,如果插件被要求生成一个不存在的类的对象)。对于QStylePlugin来说,这第二个函数叫做create()。

可以在一个插件里实现任意数目的插件子类,只要他们都是由同一个基类,比如说,QStylePlugin,派生出来的。

对于数据库驱动、图象格式、定制部件和文本编解码器,不需要显式的对象生成过程。Qt会按需求查找并生成他们。风格则是例外,因为你可能想以代码显式地设置一个风格。应用一个风格,可以使用类似代码:

    QApplication::setStyle( QStyleFactory::create( "MyStyle" ) );

有的插件类还需要实现其他函数。关于一个QWidgetPlugin的完全例子,可参见Qt设计器手册中'生成定制部件'一章的'生成定制部件'节。这个例子实现了额外的函数,以把该插件集成到Qt设计器中去。QWidgetFactory类提供了关于QWidgetPlugin的附加信息。

关于每种类型的插件必须要实现哪些虚拟函数,详见该类的文档。

Qt的应用自动辨识哪些插件可用,因为插件都是保存在标准插件子目录下的。为此,应用不需要任何查找和装载插件的代码,既然Qt已自动处理了。

插件的缺省目录是$QTDIR/plugins,每种类型的插件在那种类型的子目录下,比如说,风格(styles)。如果你想要你的应用使用插件但不要标准插件路径,可以让你的安装程序决定你要为插件使用的路径,然后保存该路径,比如说使用QSettings,以使应用在运行时可以读取。之后应用可以用该路径调用QApplication::addLibraryPath(),就可以使用你的插件了。注意,路径的最后部分,也就是说,styles、widgets等等,不能改变。

应用包括一个插件的正规方法是,要么把插件与应用一起编译,要么把插件编译为DLL(或者so或者其他平台指定的库类型),像其他库那样使用。如果要让插件可装载,一个方法是,生成一个应用下的子目录,例如,appdir/plugins/designer,把插件放置到该目录下。

转载于:https://www.cnblogs.com/new0801/p/6176889.html

Qt入门(11)——Qt插件相关推荐

  1. Qt入门学习——Qt Creator的使用

    Qt Creator介绍 通过前面<Qt快速入门(vim纯代码编写)>的学习得知,只有搭建好了 Qt 环境(Qt库和开发工具),即可通过 vim 纯代码编写 Qt 程序,再借助 Qt 里的 ...

  2. Qt入门教程-Qt介绍-01

    Qt介绍 什么是Qt: 1. qt是C++的集成开发环境. 2. qt里面集成了各种基础类,大大减轻了工作负担3. qt使用一种简单,易懂的结构来使编程工作变得高效率,快捷 程序执行过程: 由main ...

  3. QT入门安装篇+helloworld(辛酸血泪)

    实验室的demo是之前一位师兄用MFC写的一个大程序,里面复杂的让人头大,之前的梦想就是希望能够在毕业之前把那一套搞明白,随着他的离开,如今这个梦想已搁浅,MFC着实难懂,我也是把图形用户这一块搁置了 ...

  4. 翻译 | 正式发布Qt 5.11

    本文翻译自:Qt 5.11 released 原文作者: Qt公司CTO兼Qt开源项目维护官Lars Knoll 翻译校审:Richard Lin.Hongfei Zhang.Haipeng Yu 本 ...

  5. Qt开发技术:Qt的动态静态插件框架介绍和Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105481285 长期持续带来更多项目与技术分 ...

  6. 树莓派python界面qt_树莓派QT入门教程——使用Qt开发界面程序控制GPIO

    树莓派QT入门教程--使用Qt开发界面程序控制GPIO 玩转树莓派2017-07-12 12:36 树莓派入门教程--使用Qt开发界面程序 前言 Qt是一个1991年由奇趣科技开发的跨平台C++图形用 ...

  7. Qt基础与Qt on Android入门-安晓辉-专题视频课程

    Qt基础与Qt on Android入门-66107人已学习 课程介绍         本课程起始于基础的开发环境搭建和Qt Creator介绍,帮助初学者入门:着力于Qt的内在机制,由浅入深介绍信号 ...

  8. QT入门第一天平台使用规则和代码逻辑学习(初学者)

    QT入门第一天平台使用规则和代码逻辑学习 QT学习目的,岗位需求 QT的 应用领域,发展历史 QT下载安装,不同版本QT介绍 新建QT工程 1.集成开发环境介绍 2.新建QT工程 3.QT工程介绍 Q ...

  9. Qt入门------数据库操作

    文章目录 一.数据库 1.数据库驱动 2.查询驱动 3.连接数据库 4.执行sql语句 5.插入数据 6.事务 二 ,sql模型类 1.QSqlQueryModel模型 2.QSqlTableMode ...

  10. Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装

    导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且允许真正地组件编程.基本上,Qt同 ...

最新文章

  1. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
  2. SQL-Hive中的Select From解析
  3. 某短视频程序员吐槽:公司要求每天刷短视频的时长和绩效挂钩,这合理吗?网友:那某陌员工要按照奔现次数算绩效吗?...
  4. 主板上来了一个新邻居,CPU 慌了!
  5. python 搭建系统监控
  6. MyBatis多数据源配置(读写分离)
  7. Bash : test 命令
  8. webpack devserver配置_webpack中webpack-dev-server的contentBase和index属性实测
  9. 环境变量的配置windows10系统
  10. Varnish Glossary(varnish术语)
  11. spring cloud zuul 原理简介和使用
  12. 不属于jsp构成元素_JSP构成元素-JSP基础
  13. java根据表名取出字MySQL_mysql取得数据库所有表名和字段注释_MySQL
  14. android framework 触摸屏事件传递
  15. Linux 命令整理-tailf
  16. ubuntu 设置静态路由_Linux route 配置静态路由(转载)
  17. 解决Windows10无法卸载Edge浏览器,亲测有效
  18. vue 时间线组件(时间轴组件)
  19. 容器Docker学习系列五~命令学习history,save, import
  20. 资管新规下机构众生相:缩表、转型及强者生存

热门文章

  1. excel批量更改超链接_批量新建Excel指定名称工作表并设置超链接!你,学会了吗?...
  2. BootStrap笔记-表格方面的配置
  3. Spring Boot文档阅读笔记-构建Restful风格的WebService客户端
  4. Spring Boot笔记-新增嵌入式tomcat配置(修改tomcat中conf/server.xml)
  5. Qt笔记-windows下拷贝文件夹中所有文件
  6. Qt学习笔记-简单的UDP广播包聊天室
  7. 1NF 2NF 3NF BCNF
  8. idea 父文件_万事开头难!最新MyBatis程序配置教程(IDEA版)
  9. 初中数学抽象教学的案例_初中八年级数学上册教学视频汇总
  10. oracle 10.2.0.1 升级 10.2.0.5,Oracle10.2.0.1RAC 升级 Oracle10.2.0.5案例分享 -DATABASE篇