最近手里几个项目都采用插件的方式进行开发工作,这里记录一下实现方法,给需要的同学一个参考,
在linux系统和window系统都能成功编译通过,不废话直接步骤
第一步:建立插件原型
新建一个Qt项目,实现一个一个实时刷新当前时间这这么一个功能,工程命名为testdemo
如图
效果图
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | mainwidget::mainwidget(QWidget *parent) : QWidget(parent), ui( new Ui::mainwidget) { ui->setupUi( this ); QTimer *timer = new QTimer( this ); //新建定时器 connect(timer,SIGNAL(timeout()), this ,SLOT(timerUpDate())); //关联定时器计满信号和相应的槽函数 timer->start(1000); } void mainwidget::timerUpDate() { QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间 QString str = time .toString( "yyyy-MM-dd hh:mm:ss ddd" ); //设置显示格式 QString strr= strr.fromLocal8Bit( "当前时间:" )+str; //调用中文显示 ui->label->setText(strr); } |
第二步:生成插件文件
window下一般是dll后缀,linux下一般是so后缀
这里需要细说下直接上操作图片
1)这里选择Other Project 里面Qt Custom Designer Widget, 工程命名为testplugin
2)把第一步插件模型的文件附加到这个生成插件的工程中
3)找到testpluginPlugin.cpp文件下修改
1 2 3 4 5 | QWidget*testpluginPlugin::createWidget(QWidget*parent) { //returnnewtestplugin(parent);//原来代码 returnnewmainwidget(parent); //修改后代码 } |
效果图
在生成目录下就能找到生成的插件testpluginplugin.dll。
第三步 主程序调用插件
同样的新建一个主程序工程,命名为testmain
效果图
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //加载插件函数 QWidget *loadPlugins(QString pluginFileName, QWidget *parent) { QPluginLoader loader( pluginFileName ); bool b = loader.load(); if (b) qDebug( "loder ok!\r\n" ); else qDebug( "loder error!\r\n" ); QObject *plugin = loader.instance(); if (plugin) { QDesignerCustomWidgetInterface *iCustomWidgetInterface = qobject_cast<QDesignerCustomWidgetInterface *>(plugin); if ( iCustomWidgetInterface ){ QWidget *widget = iCustomWidgetInterface->createWidget( parent ); return widget; } } else qDebug( "loader.instance() error\r\n" ); return NULL; } //初始化插件 void MainWindow::loadplugin() { QString DirPath=QApplication::applicationDirPath(); DirPath=DirPath.left(DirPath.lastIndexOf( "/" )); QString pluginfilename; pluginfilename = DirPath+ "/testpluginplugin.dll" ; testwidget = loadPlugins( pluginfilename, this ); } |
这样一个完整的插件系统就实现了。
源码下载链接http://download.csdn.net/detail/huangyuancao/6653667
作者:江南烟雨居
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架