Qt一步一步实现插件调用(附源码)

时间:2020-12-26 20:48:27

最近手里几个项目都采用插件的方式进行开发工作,这里记录一下实现方法,给需要的同学一个参考,

在linux系统和window系统都能成功编译通过,不废话直接步骤

第一步:建立插件原型

新建一个Qt项目,实现一个一个实时刷新当前时间这这么一个功能,工程命名为testdemo

如图

Qt一步一步实现插件调用(附源码)

效果图 

Qt一步一步实现插件调用(附源码)

代码

123456789101112131415161718 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

Qt一步一步实现插件调用(附源码)

Qt一步一步实现插件调用(附源码)

2)把第一步插件模型的文件附加到这个生成插件的工程中

Qt一步一步实现插件调用(附源码)

3)找到testpluginPlugin.cpp文件下修改

12345 QWidget*testpluginPlugin::createWidget(QWidget*parent){//returnnewtestplugin(parent);//原来代码returnnewmainwidget(parent);//修改后代码}

效果图

Qt一步一步实现插件调用(附源码)

在生成目录下就能找到生成的插件testpluginplugin.dll。

第三步 主程序调用插件

同样的新建一个主程序工程,命名为testmain

Qt一步一步实现插件调用(附源码)

Qt一步一步实现插件调用(附源码)

效果图

Qt一步一步实现插件调用(附源码)

代码

12345678910111213141516171819202122232425262728293031323334 //加载插件函数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



FROM: http://www.cnblogs.com/newstart/p/3456918.html