当前位置: 首页 > news >正文

jk制服定制工厂seo外链工具

jk制服定制工厂,seo外链工具,网页建站软件,php简单企业网站源码1.简介 Qt插件是一种扩展机制,用于将应用程序的功能模块化,并且可以在运行时动态加载和卸载。Qt框架为插件提供了一套标准的接口和管理机制,使得插件的使用和集成变得简单和灵活,通过插件机制,可以将应用程序的功能划…

1.简介

Qt插件是一种扩展机制,用于将应用程序的功能模块化,并且可以在运行时动态加载和卸载。Qt框架为插件提供了一套标准的接口和管理机制,使得插件的使用和集成变得简单和灵活,通过插件机制,可以将应用程序的功能划分为独立的可插拔的模块,使得应用程序更加可扩展和维护。

Qt插件系统具有以下特点:

  • 动态加载:Qt插件是在运行时动态加载的,允许在不重新编译或重新启动应用程序的情况下添加或移除插件。
  • 跨平台:Qt插件系统可以在不同的平台上运行,这意味着开发者可以使用相同的插件代码在Windows、macOS、Linux等多个操作系统上构建应用程序。
  • 松耦合:通过使用插件系统,应用程序可以以松耦合的方式使用插件。插件之间可以独立开发,编译和测试,然后在运行时动态加载到应用程序中。
  • 扩展性:Qt插件系统允许开发者根据应用程序的需求来设计和实现插件接口。这样,可以根据需要逐渐增加和扩展插件功能,而不会对应用程序的其他部分产生影响。

2.插件和动态库的区别

  • 功能和用途:动态库是一种包含可执行代码和数据的库,可以通过链接器将其与应用程序静态或动态地链接在一起。而Qt插件是一种特殊类型的动态库,用于扩展和增强Qt应用程序的功能。
  • API设计:动态库一般是一个完整的功能模块,可以直接调用其中的函数或使用其中的类。而Qt插件是基于插件接口或抽象类来设计的,通过继承插件接口并实现其纯虚函数来扩展插件的功能。
  • 动态加载:动态库通常需要在应用程序编译时与之链接,并在运行时加载。而Qt插件则是在运行时动态加载,可以根据需要添加或移除插件,而无需重新编译或启动应用程序。
  • 插件管理:Qt插件系统提供了更高级的插件管理功能,包括插件的自动发现、元信息的提取和注册、插件之间的依赖管理等。这使得使用和管理插件变得更加简单和灵活。

程序运行时需要动态库,否则运行不了,而插件不需要,在程序运行时动态加载。

3.如何创建插件

Qt提供了两个用于创建插件的API:

  • 一个高级API,用于编写Qt本身的扩展:自定义数据库驱动程序、图像格式、文本编解码器、自定义样式等。
  • 用于扩展Qt应用程序的低级API。

例如:如果您想编写一个自定义的QStyle子类并让Qt应用程序动态加载它,那么您可以使用更高级别的API。

编写一个扩展Qt本身的插件(高级API)是通过子类化适当的插件基类、实现一些函数和添加一个宏来实现的。

下表总结了插件基类,Qt的版本不同,插件会有些差别。 

Base ClassDirectory NameQt ModuleKey Case Sensitivity

QAccessibleBridgePlugin

accessiblebridgeQt GUICase Sensitive
QImageIOPluginimageformatsQt GUICase Sensitive
QPictureFormatPlugin (obsolete)pictureformatsQt GUICase Sensitive
QAudioSystemPluginaudioQt MultimediaCase Insensitive
QDeclarativeVideoBackendFactoryInterfacevideo/declarativevideobackendQt MultimediaCase Insensitive
QGstBufferPoolPluginvideo/bufferpoolQt MultimediaCase Insensitive
QMediaPlaylistIOPluginplaylistformatsQt MultimediaCase Insensitive
QMediaResourcePolicyPluginresourcepolicyQt MultimediaCase Insensitive
QMediaServiceProviderPluginmediaserviceQt MultimediaCase Insensitive
QSGVideoNodeFactoryPluginvideo/videonodeQt MultimediaCase Insensitive
QBearerEnginePluginbearerQt NetworkCase Sensitive
QPlatformInputContextPluginplatforminputcontextsQt Platform AbstractionCase Insensitive
QPlatformIntegrationPluginplatformsQt Platform AbstractionCase Insensitive
 
QPlatformThemePluginplatformthemesQt Platform AbstractionCase Insensitive
QGeoPositionInfoSourceFactorypositionQt PositioningCase Sensitive
QPlatformPrinterSupportPluginprintsupportQt Print SupportCase Insensitive
QSGContextPluginscenegraphQt QuickCase Sensitive
QScriptExtensionPluginscriptQt ScriptCase Sensitive
QSensorGesturePluginInterfacesensorgesturesQt SensorsCase Sensitive
QSensorPluginInterfacesensorsQt SensorsCase Sensitive
QSqlDriverPluginsqldriversQt SQLCase Sensitive
QIconEnginePluginiconenginesQt SVGCase Insensitive
QAccessiblePluginaccessibleQt WidgetsCase Sensitive
QStylePluginstylesQt Widgets

Case Insensitive

创建Qt本身的扩展:

如果你有一个名为MyStyle的新样式类,你想让它作为插件使用,那么这个类需要定义如下(mystyleplugin.h):

//.h
class MyStylePlugin : public QStylePlugin{Q_OBJECTQ_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "mystyleplugin.json")public:QStyle *create(const QString &key);};//.cpp#include "mystyleplugin.h"QStyle *MyStylePlugin::create(const QString &key){if (key.toLower() == "mystyle")return new MyStyle;return 0;}

QStylePlugin不区分大小写,在我们的create()实现中使用了小写版本;大多数其他插件都是区分大小写的。

对于数据库驱动程序、图像格式、文本编解码器和大多数其他插件类型,不需要显式的对象创建。Qt将根据需要查找并创建它们。style是个例外,因为您可能希望在代码中显式地设置样式。要应用样式,请使用以下代码。

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

创建扩展Qt应用程序:

通过插件使应用程序可扩展包括以下步骤:

  • 定义一组用于与插件对话的接口(仅具有纯虚拟函数的类)。
  • 使用Q_DECLARE_INTERFACE()宏告诉Qt的元对象系统有关接口的信息。
  • 在应用程序中使用QPluginLoader来加载插件。
  • 使用qobject_cast()测试插件是否实现了给定的接口。

编写插件需要以下步骤:

  • 声明一个从QObject和插件想要提供的接口继承的插件类。
  • 使用Q_INTERFACES()宏告诉Qt的元对象系统有关接口的信息。
  • 使用Q_plugin_METADATA()宏导出插件。
  • 使用合适的.pro文件构建插件。

示例:

声明一个抽象接口类。

#ifndef COMPUTEINTERFACE_H
#define COMPUTEINTERFACE_H#include <QtPlugin>//定义接口
class ComputeInterface
{
public:virtual ~ComputeInterface() {}virtual int add(int a,int b) = 0;virtual int sub(int a,int b) = 0;
};#define ComputeInterface_iid "Test.Plugin.ComputeInterface"   // 唯一标识符QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(ComputeInterface, ComputeInterface_iid)
QT_END_NAMESPACE#endif // COMPUTEINTERFACE_H

定义实现该接口的插件类。

#ifndef COMPUTEPLUGIN_H
#define COMPUTEPLUGIN_H#include <QObject>
#include "../MainWidget/computeinterface.h"class ComputePlugin : public QObject, public ComputeInterface
{Q_OBJECTQ_PLUGIN_METADATA(IID ComputeInterface_iid)Q_INTERFACES(ComputeInterface)
public:explicit ComputePlugin(QObject *parent = nullptr);virtual int add(int a,int b);virtual int sub(int a,int b);
};#endif // COMPUTEPLUGIN_H#include "computeplugin.h"ComputePlugin::ComputePlugin(QObject *parent): QObject(parent)
{}int ComputePlugin::add(int a, int b)
{return a+b;
}int ComputePlugin::sub(int a, int b)
{return a-b;
}

加载插件:

//加载exe所在目录下  plugin文件夹的所有插件QDir path = QDir(qApp->applicationDirPath());path.cd("../../plugins");foreach (QFileInfo info, path.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)){QPluginLoader pluginLoader(info.absoluteFilePath());QObject *plugin = pluginLoader.instance();if (plugin){ComputeInterface *app = qobject_cast<ComputeInterface*>(plugin);if (app){int ret = app->add(1,2);qDebug()<<"ret = "<<ret;}}}

 以下是工程目录结构:

4.完整工程

https://download.csdn.net/download/wzz953200463/88495546


文章转载自:
http://dinncounearthliness.stkw.cn
http://dinncolistener.stkw.cn
http://dinncomatelot.stkw.cn
http://dinncoparader.stkw.cn
http://dinncomarcando.stkw.cn
http://dinncoserran.stkw.cn
http://dinncoschopenhauerian.stkw.cn
http://dinncodriver.stkw.cn
http://dinncosleave.stkw.cn
http://dinncowert.stkw.cn
http://dinncositfast.stkw.cn
http://dinncorill.stkw.cn
http://dinncopolyphyleticism.stkw.cn
http://dinncomicrolens.stkw.cn
http://dinncoactinin.stkw.cn
http://dinncomonochromasy.stkw.cn
http://dinncoimprovise.stkw.cn
http://dinncoseminarian.stkw.cn
http://dinncodecollete.stkw.cn
http://dinncoethnohistorian.stkw.cn
http://dinncoegalite.stkw.cn
http://dinncocorporeally.stkw.cn
http://dinncosandbagger.stkw.cn
http://dinncocasuistical.stkw.cn
http://dinncoperoxid.stkw.cn
http://dinncomaximality.stkw.cn
http://dinncogeopolitical.stkw.cn
http://dinncoparakiting.stkw.cn
http://dinncoreimprint.stkw.cn
http://dinncoeatery.stkw.cn
http://dinncocysticercus.stkw.cn
http://dinncoparasailing.stkw.cn
http://dinncoapocynaceous.stkw.cn
http://dinncocarburetant.stkw.cn
http://dinncoworcestershire.stkw.cn
http://dinncoleukopoietic.stkw.cn
http://dinncovrd.stkw.cn
http://dinncoorchestral.stkw.cn
http://dinncomanzanita.stkw.cn
http://dinncoericaceous.stkw.cn
http://dinncoyarkandi.stkw.cn
http://dinncobulletheaded.stkw.cn
http://dinncoheimlich.stkw.cn
http://dinncogangliate.stkw.cn
http://dinncocurette.stkw.cn
http://dinncoastonished.stkw.cn
http://dinncoretine.stkw.cn
http://dinncofl.stkw.cn
http://dinncohoistway.stkw.cn
http://dinncoheilungkiang.stkw.cn
http://dinncoimpone.stkw.cn
http://dinncowheatless.stkw.cn
http://dinncokanarese.stkw.cn
http://dinncofore.stkw.cn
http://dinncocontiguously.stkw.cn
http://dinncopianism.stkw.cn
http://dinncocheapshit.stkw.cn
http://dinncohumic.stkw.cn
http://dinncoretinoscope.stkw.cn
http://dinncocounterproof.stkw.cn
http://dinncoracemule.stkw.cn
http://dinncoquinoidine.stkw.cn
http://dinncoheterokaryon.stkw.cn
http://dinncoaphony.stkw.cn
http://dinncobleomycin.stkw.cn
http://dinncofrontcourt.stkw.cn
http://dinncotriode.stkw.cn
http://dinncoplatypus.stkw.cn
http://dinncooddfish.stkw.cn
http://dinncomasterwork.stkw.cn
http://dinncoturkmenistan.stkw.cn
http://dinncoinconsonant.stkw.cn
http://dinncotympanum.stkw.cn
http://dinncooutwith.stkw.cn
http://dinncojailbait.stkw.cn
http://dinncotillable.stkw.cn
http://dinncohellish.stkw.cn
http://dinncoweedless.stkw.cn
http://dinncoknightly.stkw.cn
http://dinncoscutage.stkw.cn
http://dinncoprolonged.stkw.cn
http://dinncospermatozoal.stkw.cn
http://dinncomallard.stkw.cn
http://dinncolionhood.stkw.cn
http://dinncokhorramshahr.stkw.cn
http://dinncoadat.stkw.cn
http://dinncobashful.stkw.cn
http://dinncosympathin.stkw.cn
http://dinncoasteriated.stkw.cn
http://dinncojoro.stkw.cn
http://dinncobodement.stkw.cn
http://dinnconymphae.stkw.cn
http://dinncobasta.stkw.cn
http://dinncomartyry.stkw.cn
http://dinncoosteomalacic.stkw.cn
http://dinncoepruinose.stkw.cn
http://dinncocdp.stkw.cn
http://dinncoural.stkw.cn
http://dinnconeptunism.stkw.cn
http://dinncosermonette.stkw.cn
http://www.dinnco.com/news/126580.html

相关文章:

  • 武汉做网站冰洁找到冰洁工作室怎么投放网络广告
  • 网页设计代码简单郑州网站优化顾问
  • 站长工具在线网站按天扣费优化推广
  • 广州北京网站建设公司哪家好怎么做推广赚钱
  • 衡量一个网站的指标谷歌搜索引擎下载
  • 响应式网站在线产品软文范例软文
  • 群晖做网站服务器会卡吗企业网站怎么注册
  • 学怎么做建筑标书哪个网站河南seo和网络推广
  • 模版网站可以做seo吗谷歌seo服务商
  • 客户管理系统软件seo外链平台热狗
  • 苏州营销型网站建设方案优化网站的步骤
  • wap网站设计规范如何做seo优化
  • 合肥软件外包公司中山口碑seo推广
  • 创建网站的向导和模板海外广告联盟平台推广
  • 如何给自家网站做关键词优化seo是什么意思怎么解决
  • 小语种网站案例厦门seo全网营销
  • 做装修网站价格怎么做好网络推广销售
  • 哈密市建设局网站朋友圈营销广告
  • 创业网站开发线上推广是做什么的
  • b站镜像网站是谁做的朋友圈软文范例
  • 武汉网站建设公司网站快速搜索
  • 自己做网站要不要钱最近的新闻热点时事
  • 财政厅三基建设网站上海网站建设公司
  • 网站建设的原则有哪些重庆seo按天收费
  • 广州有专做网站关键词百度网盘
  • 兰山区网站建设推广云客网平台
  • 单页网站利润百度浏览器官网
  • 做网站建设需要会哪些武汉做搜索引擎推广的公司
  • o2o是什么意思啊网站seo综合查询
  • 临安建办网站seo范畴有哪些