您的位置:首页 > 编程语言 > Qt开发

Qt之一步一步实现插件调用

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

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

第一步:建立插件原型

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

如图



效果图 



代码

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文件下修改
QWidget*testpluginPlugin::createWidget(QWidget*parent)
{
//returnnewtestplugin(parent);//原来代码
returnnewmainwidget(parent);//修改后代码
}


效果图



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

第三步 主程序调用插件

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





效果图



代码
//加载插件函数
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/download/caoshangpa/10114302

原文链接:http://www.cnblogs.com/newstart/p/3456918.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt 插件