Qt Plugin笔记

1、理念是App定义接口,Dll实现接口,因此接口定义源文件是在App这里。

2、Dll没有导出类名这个说法,因为这些类App压根是看不见的,也就是说Dll并不是提供它内部的类名给App,App只是调用App自己定义的接口,只不过这些接口是由Dll内部类实现的,App通过QPluginLoader.instance()函数拿到了指向Dll提供的类对象的指针,这实际上就是导出类的对象指针(即接口的派生类的指针),但是对于App来说它无需关注这个派生类名,它只要按接口定义使用就行了。

3、Q_DECLARE_INTERFACE(可以看该宏定义)实际上是定义了几个qobject_cast函数,用于App将加载的plugin对象指针动态转换为接口指针(因此这个宏是定义在App里的)。一条该宏只能定义一个接口类。这个宏可以理解成“App说,我声明了这些接口,就这么用。”

4、Q_INTERFACES是定义在Dll里的用于实现接口的派生类里,一条宏可以定义该类实现的所有接口,各接口之间用空格分开。这个宏可以理解成“Dll说,好,我实现了这些接口。”

5、从QPluginLoader的帮助文档看,提到了插件的root component,也就是说一个插件对外只能提供种类的对象,也就是QPluginLoader.instance()返回的那个。

6、Q_PLUGIN_METADATA让moc生成导出函数qt_plugin_instance(),供QPluginLoader()调用,创建接口实例,不过返回的是一个QObject*.

7、Qt里根本就不存在“QPlugin”这么一个类,Qt的插件机制更像是对于C++抽象类(即定义接口)的一个丰富,插件不一定独立在一个DLL里,它完全可以和应用程序在一个程序中,在这个时候它实际上就是个普通的C++抽象机制,而且这时候也不需要QPluginLoader。

参考:

 (1)  https://www.cnblogs.com/warmlight/p/12626797.html?ivk_sa=1024320u

(2)Qt源码例子:C:\Qt\Qt5.9.6\Examples\Qt-5.9.6\widgets\tools\plugandpaint

(3)QT插件机制中宏Q_PLUGIN_METADATA和Q_INTERFACES的作用_wangw8507的博客-CSDN博客_qt插件机制

(4)Qt的元对象(Meta-Object)系统简介_viclee108的博客-CSDN博客 

(5)使用QGenericPlugin和QPluginLoader创建和加载插件-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一款跨平台的C++应用程序开发框架,支持各种GUI(图形用户界面)和非GUI应用程序开发。Qt提供了插件(Plugin)机制,使开发者可以将应用程序的功能模块化,以实现灵活的插件化开发。 Qt插件机制允许开发者将应用程序的一部分功能独立封装成插件,并在运行时动态加载。这样的好处是插件可以在不重新编译整个应用程序的情况下进行更新或替换,极大地提升了开发效率和灵活性。 插件化开发中,Qt提供了一些关键的类和接口,包括QPluginLoader、QObject和Q_EXPORT_PLUGIN2等。首先,使用QPluginLoader类可以在运行时加载插件,并提供了查找和实例化插件的功能。其次,插件类需要派生自QObject类,并通过宏Q_OBJECT和Q_PLUGIN_METADATA来声明,以便Qt能够正确处理插件的元数据和信号槽机制。最后,Q_EXPORT_PLUGIN2宏用于导出插件类的实例,使其可以被QPluginLoader动态加载。 利用Qt的插件机制,开发者可以将应用程序按功能划分为不同的插件模块,简化开发过程和项目维护。插件可以通过简单的配置文件进行注册和管理,实现插件的自动加载和卸载。另外,Qt的信号槽机制可以在插件之间进行通信和交互。这使得多个独立开发的插件可以灵活地协同工作,提供更丰富的功能和扩展性。 总结来说,Qt的插件机制使得应用程序的功能模块化,提供了灵活的插件化开发方式。开发者可以通过动态加载和卸载插件,实现插件的更新和替换,提升开发效率和项目的可维护性。插件之间可以通过信号槽机制进行通信和交互,实现更丰富的功能和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值