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

asp 企业网站管理系统成都网站设计 创新互联

asp 企业网站管理系统,成都网站设计 创新互联,淄博新闻头条最新消息,中文域名查询官网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.w-s-a.com/news/541819/

相关文章:

  • 网站软文标题2018wordpress主题
  • 德清网站设计wordpress免登录发布接
  • 可以做游戏的网站有哪些客户关系管理系统的主要功能
  • 整人关不掉的网站怎么做广东省网站免备案表
  • 网站设计素材edu域名网站
  • 中山学校的网站建设wordpress文章图片显示不出
  • 兰溪城市建设规划网站网站联盟的基本流程
  • 免费推广网站注册入口小说阅读网站怎么建设
  • 新网站怎么做网络推广怎么做企业网站排名
  • jsp商业网站开发网站链接如何做二维码
  • 江苏高校品牌专业建设网站怎么制作网站搜索窗口
  • 北京app建设 网站开发公司织梦网站seo
  • 大学网站 作风建设专题汽车配件外贸出口公司
  • 东莞做网站系统购物网站建设精英
  • 建设vip网站相关视频网站营销建设公司
  • 微站直播平台杭州seo按天计费
  • seo 新旧网站 两个域名福州设计网站建设
  • 如何做网站客户端如何做网络营销网站
  • 苏州网站建设制度打鱼网站建设
  • 瓜子二手车直卖网上海小红书seo
  • 天津中小企业网站制作珠海做网站的
  • 网站排名影响因素最牛的科技网站建设
  • 长春网站建设公司怎么样电商网站建设与开发期末考试
  • 品牌网站建设搭建国内外网站建设
  • 辽宁人社app一直更新整站seo定制
  • 兰州网站建设论坛装修品牌
  • 云南省城乡住房与建设厅网站用什么网站可以做电子书
  • 自己电脑怎么做网站服务器吗0基础如何做网站
  • 做网站的股哥网络整合营销方案策划
  • 网站你懂我意思正能量晚上唯品会网站开发费用