最近手里幾個項目都采用插件的方式進行開發工作,這里記錄一下實現方法,給需要的同學一個參考,
在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/detail/huangyuancao/6653667
