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

学习前端的网站商城小程序定制公司

学习前端的网站,商城小程序定制公司,wordpress页面调用子页面内容,苏州吴中区做网站1.简介 Qt插件是一种扩展机制#xff0c;用于将应用程序的功能模块化#xff0c;并且可以在运行时动态加载和卸载。Qt框架为插件提供了一套标准的接口和管理机制#xff0c;使得插件的使用和集成变得简单和灵活#xff0c;通过插件机制#xff0c;可以将应用程序的功能划…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 SensitiveQImageIOPluginimageformatsQt GUICase SensitiveQPictureFormatPlugin (obsolete)pictureformatsQt GUICase SensitiveQAudioSystemPluginaudioQt MultimediaCase InsensitiveQDeclarativeVideoBackendFactoryInterfacevideo/declarativevideobackendQt MultimediaCase InsensitiveQGstBufferPoolPluginvideo/bufferpoolQt MultimediaCase InsensitiveQMediaPlaylistIOPluginplaylistformatsQt MultimediaCase InsensitiveQMediaResourcePolicyPluginresourcepolicyQt MultimediaCase InsensitiveQMediaServiceProviderPluginmediaserviceQt MultimediaCase InsensitiveQSGVideoNodeFactoryPluginvideo/videonodeQt MultimediaCase InsensitiveQBearerEnginePluginbearerQt NetworkCase SensitiveQPlatformInputContextPluginplatforminputcontextsQt Platform AbstractionCase InsensitiveQPlatformIntegrationPluginplatformsQt Platform AbstractionCase Insensitive  QPlatformThemePluginplatformthemesQt Platform AbstractionCase InsensitiveQGeoPositionInfoSourceFactorypositionQt PositioningCase SensitiveQPlatformPrinterSupportPluginprintsupportQt Print SupportCase InsensitiveQSGContextPluginscenegraphQt QuickCase SensitiveQScriptExtensionPluginscriptQt ScriptCase SensitiveQSensorGesturePluginInterfacesensorgesturesQt SensorsCase SensitiveQSensorPluginInterfacesensorsQt SensorsCase SensitiveQSqlDriverPluginsqldriversQt SQLCase SensitiveQIconEnginePluginiconenginesQt SVGCase InsensitiveQAccessiblePluginaccessibleQt WidgetsCase SensitiveQStylePluginstylesQt 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.hQStyle *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.hclass 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.hComputePlugin::ComputePlugin(QObject *parent): QObject(parent) {}int ComputePlugin::add(int a, int b) {return ab; }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_castComputeInterface*(plugin);if (app){int ret app-add(1,2);qDebug()ret ret;}}} 以下是工程目录结构 4.完整工程 https://download.csdn.net/download/wzz953200463/88495546
http://www.hkea.cn/news/14484568/

相关文章:

  • .net网站开发面试东莞做网站多少钱
  • 温州建设小学的网站前端开发网页设计
  • 哪个网站可以做社工试题网站如何做内链
  • 遂宁公司做网站安康市教育云平台
  • 做个电商网站多少钱免费网站制作软件的app
  • 台州做网站多少钱全国 网站备案 数量
  • 北京做网站的公司排行wordpress 无所不能
  • WordPress博客文件网站seo优化很好徐州百都网络点赞
  • 做标书经验分享网站编程课程培训机构排名
  • 西安建站软件互联网平台名称设计图
  • 做企业网站的公司网站建设谢辞
  • 做直播网站有市场吗wordpress主题注册页美化
  • 做网站年薪百万微信小程序如何推广
  • 网站开发整合套件宁德小程序开发
  • 沧州做网站公司长治公司网站建设
  • 网站开发文档doc南通网站开发招聘
  • 企业网站建设管理平台东莞网站案例营销
  • 电子商务网站建设类论文公司做网站一定要钱吗
  • 网站建设有必要做手机端吗春雨直播免费视频
  • 合肥网站推广公司哪家好wordpress用户个人主页
  • 杭州设计网站最好的公司怎样自创广告网站
  • 丹阳网站建设北京网站大全
  • 个人网站建立 学生wordpress游客怎么发表文章
  • 网站开发所需要的语言营销型网站管理方案
  • 医疗软件网站建设公司排名建设文明网 联盟网站的
  • 爱游戏app下载官方网站贵州遵义网
  • 网站推广工作计划设计图制作软件app手机
  • 切实加强门户网站建设新开元电销系统
  • 山西省住房建设厅网站下载wordpress wending
  • 河南建筑工程信息绵阳做seo网站公司