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

室内设计公司 网站建设aso优化榜单

室内设计公司 网站建设,aso优化榜单,网站的做公司,wordpress中文转拼音目录 1.生成插件 1.1.环境说明 1.2.服务类#xff0c;纯虚类#xff0c;提供接口 1.3.实现插件类#xff0c;实现纯虚函数 1.4.激活插件#xff0c;加入ctk框架的生命周期中 1.5.添加资源文件 1.6..pro文件 2.使用此插件 3.总结 1.生成插件 1.1.环境说明 编译ct…目录 1.生成插件 1.1.环境说明 1.2.服务类纯虚类提供接口 1.3.实现插件类实现纯虚函数 1.4.激活插件加入ctk框架的生命周期中 1.5.添加资源文件 1.6..pro文件 2.使用此插件 3.总结 1.生成插件 1.1.环境说明 编译ctkQt5.12.12MSVC2017_64Cmake 生成插件Qt5.12.2MSVC2017_64qmake 1.2.服务类纯虚类提供接口 PluginAService.h #ifndef PLUGINASERVICE_H #define PLUGINASERVICE_H #include QtPluginclass PluginAService { public:virtual ~PluginAService() {}virtual void A_Func() 0; };#define PluginAService_iid org.commontk.service.demos.PluginAService Q_DECLARE_INTERFACE(PluginAService, PluginAService_iid) //此宏将当前这个接口类声明为接口后面的一长串就是这个接口的唯一标识。#endif // PLUGINASERVICE_H 1.3.实现插件类实现纯虚函数 PluginAImpl.h #ifndef PLUGINAIMPL_H #define PLUGINAIMPL_H#include PluginAService.h #include QObjectclass ctkPluginContext;class PluginAImpl : public QObject, public PluginAService {Q_OBJECTQ_INTERFACES(PluginAService)/*此宏与Q_DECLARE_INTERFACE宏配合使用。Q_DECLARE_INTERFACE声明一个接口类Q_INTERFACES当一个类继承这个接口类表明需要实现这个接口类*/public:PluginAImpl(ctkPluginContext* context);void A_Func() Q_DECL_OVERRIDE; };#endif // PLUGINAIMPL_H PluginAImpl.cpp #include PluginAImpl.h #include QtDebugPluginAImpl::PluginAImpl(ctkPluginContext* context) {}void PluginAImpl::A_Func() {qDebug() A_Func(); } 1.4.激活插件加入ctk框架的生命周期中 PluginAActivator.h #ifndef PLUGINAACTIVATOR_H #define PLUGINAACTIVATOR_H #include QObject #include ctkPluginActivator.h #include PluginAService.hclass PluginAActivator : public QObject, public ctkPluginActivator {Q_OBJECTQ_INTERFACES(ctkPluginActivator)Q_PLUGIN_METADATA(IID PLUGINA)//向Qt的插件框架声明希望将xxx插件放入到框架中。public:void start(ctkPluginContext* context);void stop(ctkPluginContext* context);private:QSharedPointerPluginAService m_s; }; #endif // PLUGINAACTIVATOR_H PluginAActivator.cpp #include PluginAActivator.h #include PluginAImpl.h #include QDebugvoid PluginAActivator::start(ctkPluginContext* context) {PluginAImpl* pluginAImpl new PluginAImpl(context);context-registerServicePluginAService(pluginAImpl);m_s.reset(pluginAImpl); }void PluginAActivator::stop(ctkPluginContext* context) {Q_UNUSED(context)//Q_UNUSED,如果一个函数的有些参数没有用到、某些变量只声明不使用但是又不想编译器、编辑器报警报其他没有什么实际性作用 } 1.5.添加资源文件 资源名随便取前缀为PluginA/META_INF文件名为MANIFEST.MF MANIFEST.MF内容 注意MANIFEST.MF的路径必须是这样:/插件名/META-INF/MANIFEST.MF否则系统找打不到此资源文件此插件加载就会报异常。 MANIFEST.MF文件中有很多可填内容在ctkPluginConstants.h中能找到相关宏定义 1.6..pro文件 include($$PWD/../../Plugins/Plugins.pri)QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET PluginA# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0HEADERS \PluginAActivator.h \PluginAImpl.h \PluginAService.hSOURCES \PluginAActivator.cpp \PluginAImpl.cppRESOURCES \resource.qrc2.使用此插件 main.cpp #include QCoreApplication #include ctkPluginFrameworkFactory.h #include ctkPluginFramework.h #include ctkPluginException.h #include ctkPluginContext.h #include QtDebug #include QUrl #include PluginAService.hQString static firstPlugin_filePath D:/openCode/ctkcreator/bin/qmake/debug/plugins/PluginA.dll;int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);QApplication a(argc, argv);//启动框架QString path QCoreApplication::applicationDirPath() /linkplugins;ctkPluginFrameworkLauncher::addSearchPath(path, true);ctkProperties properties;properties.insert(ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN, ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT);ctkPluginFrameworkFactory fwFactory(properties);QSharedPointerctkPluginFramework framework fwFactory.getFramework();// 初始化并启动插件框架try {framework-init();framework-start();qDebug() CTK plugin framework start...;} catch (const ctkPluginException e) {qDebug() CTK plugin framework init err: e.what();return -1;}// 获取插件服务的contexctkPluginContext* pluginContext framework-getPluginContext();try {// 安装插件QSharedPointerctkPlugin plugin pluginContext-installPlugin(QUrl::fromLocalFile(firstPlugin_filePath));qDebug() QString(Plugin[%1_%2] installed...).arg(plugin-getSymbolicName()).arg(plugin-getVersion().toString());// 启动插件plugin-start(ctkPlugin::START_TRANSIENT);qDebug() Plugin start...;} catch (const ctkPluginException e) {qDebug() QString(Failed install or run plugin: ) e.what();return -2;}// 获取服务引用ctkServiceReference reference pluginContext-getServiceReferencePluginAService();if (reference) {// 获取指定 ctkServiceReference 引用的服务对象PluginAService* service qobject_castPluginAService*(pluginContext-getService(reference));if (service ! Q_NULLPTR) {// 调用服务service-A_Func();}}return a.exec(); } 不出意外在控制台会打印出A_Func()。 3.总结 这就是在Qt和CTK中编写和使用插件的基本流程。CTK作为Qt的扩展主要用于医疗应用开发但插件的编写和加载机制仍然遵循Qt的标准做法。希望这能帮助你开始编写自己的CTK插件
http://www.pierceye.com/news/651156/

相关文章:

  • 个人主页自助建站凡科网干嘛的
  • 网站后台上传图片不显示品牌营销咨询公司
  • 卖房网站母亲节做什麽活动从传播的角度
  • 永久免费的cad软件seo咨询
  • 网站邮件功能设计理论网站排名软件包年
  • wordpress语言文件编辑专业的企业网站优化公司
  • 正定网站建设制作公司wordpress去掉模板登录
  • 定制开发一个网站多少钱网站开发项目的心得体会
  • 网站被做跳转怎么办个人网站开发软件
  • 湛江网站制作费用南昌建站系统外包
  • 杭州市住房和城乡建设厅网站网页设计个人网站作业
  • 钦州建站哪家好杭州网站建站平台
  • 程序员做笔记的网站在线简历制作系统
  • 有一个网站自己做链接获取朋友位置wordpress504
  • 设计感 网站wordpress企业内网主题
  • 金塔精神文明建设网站上线了小程序制作平台
  • 东莞阳光网站建设成效网站内容营销
  • 阿里云做网站吗深圳香蜜湖街道
  • 营销型网站名词解释关键词有几种类型
  • 高端网站建设浩森宇特Php做网站要求
  • 盐田高端网站建设湖南网站seo营销多少费用
  • 福州建设招聘信息网站东莞房价将暴跌
  • 外包做网站的要求怎么写网站建设调查分析
  • 北京网站建设公司哪个最好鲜花网页设计模板
  • 汕头网站制作方法江苏网站设计公司
  • 免费1级做看网站上海策朋网站设计公司
  • 自贡做网站的公司wordpress网站加密码
  • 长春建设网站公司哪家好学校网站建设实施方案
  • 邯郸网站优化怎么用建设通网站会员共享密码
  • 怎么使自己做的网站有音乐简易 建站