前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ctk框架搭建(一) ctk框架插件加载与项目结构

ctk框架搭建(一) ctk框架插件加载与项目结构

作者头像
全栈程序员站长
发布2022-09-06 11:44:44
发布2022-09-06 11:44:44
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

使用CTK框架开发有大半年了,就实际应用上来说框架还比较可靠,但网上资料很少。而刚接触时项目已经有了相当大的体量,与业务等其他逻辑混淆,现在单独把ctk框架部分抽离出来做个总结分享,避免后来的人走弯路。

该系列介绍简单的ctk框架构建的方法,具体架构可根据自身项目设计,开发环境为macOS High Sierra,QtCreator 5.10.0。

ctk框架插件

CTK源码可以从GitHub上下载,地址 https://github.com/commontk/CTK,然后使用cmake编译出与系统版本相应的动态库。

等等,cmake是什么?cmake怎么编译?我竟然不知道cmake!!!

……

……

……

于是,我得到了Xcode编译出的libCTKCore.dylib,以及libCTKPluginFramework.dylib(/*此处省略五百字*/)

CTKCore的头文件包括:

代码语言:javascript
代码运行次数:0
复制
GitHub源码/Libs/Core/*.h     Xcode编译目录/ctk-build/Libs/Core/ctkCoreExport.h;

CTKPluginFramework的头文件包括:

代码语言:javascript
代码运行次数:0
复制
GitHub源码/Libs/PluginFramework/*.h     GitHub源码/Libs/PluginFramework/service/*.h,     Xcode编译目录/ctk-build/Libs/PluginFramework/ctkPluginFrameworkExport.h。

取出头文件后,编译出的动态库就可以当普通动态库使用加载了,pro里面加载代码为:

代码语言:javascript
代码运行次数:0
复制
macx: LIBS += -L$$PWD/../libs/ -lCTKCore.0.1.0
代码语言:javascript
代码运行次数:0
复制
macx: LIBS += -L$$PWD/../libs/ -lCTKPluginFramework.0.1.0
代码语言:javascript
代码运行次数:0
复制
INCLUDEPATH += $$PWD/../inclues \
代码语言:javascript
代码运行次数:0
复制
        += $$PWD/../includes/core \
代码语言:javascript
代码运行次数:0
复制
        += $$PWD/../includes/pluginFramework
代码语言:javascript
代码运行次数:0
复制
INCLUDEPATH += $$PWD/../libs
代码语言:javascript
代码运行次数:0
复制
DEPENDPATH += $$PWD/../libs

每个插件都要加载。

项目结构

由于每一个插件都要建一个子项目,本项目刚开始创建时在QtCreator中选择新建-其他项目-子目录项目,新建项目名称为ctkExample,然后建立主程序入口项目,这里建立一个控制台项目,取名叫console。

更改项目输出路径:console.pro

代码语言:javascript
代码运行次数:0
复制
DESTDIR = $$PWD/../bin

主函数中加载插件,启动框架:main.cpp

代码语言:javascript
代码运行次数:0
复制
#include <QCoreApplication>
代码语言:javascript
代码运行次数:0
复制
#include "ctkPluginFrameworkFactory.h"
代码语言:javascript
代码运行次数:0
复制
#include "ctkPluginFramework.h"
代码语言:javascript
代码运行次数:0
复制
#include "ctkPluginException.h"
代码语言:javascript
代码运行次数:0
复制
#include <QDebug>
代码语言:javascript
代码运行次数:0
复制
int main(int argc, char *argv[])
代码语言:javascript
代码运行次数:0
复制
{
代码语言:javascript
代码运行次数:0
复制
    QCoreApplication a(argc, argv);
代码语言:javascript
代码运行次数:0
复制
    a.setApplicationName("ctkExample");//给框架创建名称,Linux下没有这步会报错
代码语言:javascript
代码运行次数:0
复制
    ctkPluginFrameworkFactory factory;//插件工厂类
代码语言:javascript
代码运行次数:0
复制
    QSharedPointer<ctkPluginFramework> framework;
代码语言:javascript
代码运行次数:0
复制
    framework = factory.getFramework();
代码语言:javascript
代码运行次数:0
复制
    try{
代码语言:javascript
代码运行次数:0
复制
        framework->init();
代码语言:javascript
代码运行次数:0
复制
        framework->start();
代码语言:javascript
代码运行次数:0
复制
    }
代码语言:javascript
代码运行次数:0
复制
    catch(const ctkPluginException& e){
代码语言:javascript
代码运行次数:0
复制
        qDebug() << "framework init fail";
代码语言:javascript
代码运行次数:0
复制
        qDebug() << e.message() << e.getType();
代码语言:javascript
代码运行次数:0
复制
    }
代码语言:javascript
代码运行次数:0
复制
    return a.exec();
代码语言:javascript
代码运行次数:0
复制
}
代码语言:javascript
代码运行次数:0
复制

没有报错的话及表示插件加载成功!

其中QSharedPointer<ctkPluginFramework> framework这个对象比较有意思,既可以作为对象也可以作为对象指针,但要作为插件框架使用必须要用指针方法调用,所以代码里使用“->”。

小结

刚开始写技术博客,不知道是啰嗦了还是部分地方没讲清楚,大家将就看,有不懂的地方欢迎留言(如果有人看的话,远目~)

关于刚开始提到的cmake,由于该系列还有几章,再讲cmake容易扯远,如果有必要的话以后单独开一篇讲。

参考文献

cmake编译:http://blog.csdn.net/ji2013/article/details/12370745

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135091.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月5,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ctk框架插件
  • CTK源码可以从GitHub上下载,地址 https://github.com/commontk/CTK,然后使用cmake编译出与系统版本相应的动态库。
  • 项目结构
  • 小结
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档