青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::
From: http://blog.csdn.net/henreash/article/details/7264489@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

創(chuàng)建一個QT的庫項目,刪除自動生成的.h和.cpp文件,添加一個接口定義.h文件和一個接口實現(xiàn)類(一個.h一個.cpp).代碼如下:

1.接口文件源碼

#ifndef PLUGININTERFACE_H
#define PLUGININTERFACE_H

#include <QString>


class EchoInterface
{
public:
 virtual ~EchoInterface() {}
 virtual QString echo(const QString &message) = 0;
};

QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(EchoInterface, "com.hollysys.plugin.EchoIntrface/1.0");
QT_END_NAMESPACE


#endif

2.接口實現(xiàn)類頭文件

#ifndef PLUGIN_H
#define PLUGIN_H

//#include "plugin_global.h"
#include <QObject>
#include "plugininterface.h"

class Plugin : public QObject, EchoInterface
{
 Q_OBJECT
 Q_INTERFACES(EchoInterface)
public:
 Plugin();
 ~Plugin();
public:
 QString echo(const QString &message);


};

#endif // PLUGIN_H

3.接口實現(xiàn)類cpp文件

#include "plugin.h"
#include <QtGui>


Plugin::Plugin()
{

}

Plugin::~Plugin()
{

}

QString Plugin::echo(const QString &message)
{
 return message;
}

Q_EXPORT_PLUGIN2("echoPlugin", Plugin);

編譯生成dll格式的插件.這里可能會遇到LNK2001錯誤,因為插件接口定義依賴于QT的元數(shù)據(jù),而在代碼中手動添加Q_OBJECT宏后,編譯器不會自動為我們生成moc_XXXX.cpp文件,因此需要使用命令行生成moc元數(shù)據(jù)文件:cmd-->cd 源碼所在命令 -->moc -o moc_XXXX.cpp XXXX.h.這樣就可以手動創(chuàng)建出moc元數(shù)據(jù)文件,解決LNK2001編譯錯誤.

建立一個GUI測試項目,代碼如下:

#include "test.h"
#include <QtGui>
#include <QMessageBox>
#include <QDir>

Test::Test(QWidget *parent, Qt::WFlags flags)
 : QMainWindow(parent, flags)
{
 ui.setupUi(this);
 QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(ButtonClicked()));
 loadPlugin();
}

Test::~Test()
{

}

bool Test::loadPlugin()
{
 QDir pluginsDir(qApp->applicationDirPath());
 foreach (QString filename, pluginsDir.entryList(QDir::Files))
 {
  QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(filename));
  QObject *plugin = pluginLoader.instance();
  if(plugin)
  {
   echoInterface = qobject_cast<EchoInterface *>(plugin);//echoInterface是成員變量
   if(echoInterface)
    return true;
  }
 }
}

void Test::ButtonClicked()
{
 QString plugin = ui.lineEdit->text();
 QMessageBox::information(NULL, "", echoInterface->echo(plugin));
}

分析代碼可見,這里對所有與exe文件同目錄的文件嘗試加載插件,如果加載成功則返回.代碼實現(xiàn)非常簡潔.在正式開發(fā)中可將已加載的插件接口存放在列表中,在需要的時候依次調(diào)用即可.

另外如果想獲取插件中類定義的元數(shù)據(jù),可以使插件接口類從QObject繼承,并使用Q_CLASSINFO宏添加鍵值對,如Q_CLASSINFO("Author**", "Henreash**").并從主程序中使用插件對象元數(shù)據(jù)獲取這些鍵值對:

 const QMetaObject *mo = echoInterface->metaObject();
 for(int i = 0; i < mo->classInfoCount(); i++)
 {
  qDebug() << mo->classInfo(i).name() << mo->classInfo(i).value();
 }

使用這個機制可以在定義插件類的時候向主程序傳遞一些特殊信息.

測試發(fā)現(xiàn),如果在插件接口類中定義一個靜態(tài)變量,那么這個靜態(tài)變量在插件中的地址和在主程序中的地址是不相同的.

posted on 2013-06-25 23:26 逛奔的蝸牛 閱讀(2075) 評論(0)  編輯 收藏 引用 所屬分類: C/C++Qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区久久| 久久精品国产欧美激情| 亚洲第一中文字幕在线观看| 精品96久久久久久中文字幕无| 国产亚洲精品资源在线26u| 国产一区二区三区在线观看视频 | 午夜精品福利电影| 久久米奇亚洲| 欧美日韩国产va另类| 国产欧美一区二区精品忘忧草| 亚洲国产精品成人va在线观看| 日韩一区二区免费看| 久久久久综合| 夜夜狂射影院欧美极品| 久久影院亚洲| 国产一区二区三区的电影 | 亚洲高清资源| 亚洲人成人一区二区三区| 午夜一区二区三区在线观看| 欧美日韩大陆在线| 午夜在线视频观看日韩17c| 亚洲第一网站| 国产精品电影网站| 亚洲毛片av在线| 久久亚洲春色中文字幕久久久| 99在线热播精品免费99热| 国产欧美va欧美不卡在线| 欧美不卡在线| 久久精品一区二区国产| 国产欧美日韩视频一区二区三区| 久久免费少妇高潮久久精品99| 农村妇女精品| 亚洲激情在线| 欧美激情女人20p| 久久久精品一品道一区| 9久草视频在线视频精品| 亚洲另类黄色| 欧美国产一区二区在线观看| 亚洲国产成人在线| 亚洲欧美激情视频在线观看一区二区三区| 欧美日本国产精品| 中文欧美字幕免费| 一区二区三区色| 欧美午夜剧场| 亚洲欧美一区二区精品久久久| 亚洲最新视频在线播放| 激情欧美一区二区三区在线观看 | 香蕉成人久久| 欧美激情视频网站| 99热在这里有精品免费| 久久精品视频在线| 欧美一级视频免费在线观看| 欧美精品91| 亚洲高清不卡| 亚洲国产精品久久久久| 久久精品人人做人人综合| 午夜在线电影亚洲一区| 欧美天天在线| 久久久夜夜夜| 国产亚洲福利社区一区| 亚洲一区二区在线免费观看| 国产一区二区三区四区hd| 亚洲制服av| 亚洲欧美国产日韩中文字幕| 久久精品国产综合精品| 久久riav二区三区| 欧美第十八页| 久久99伊人| 国产精品女人久久久久久| 麻豆精品视频在线观看| 欧美日韩精品系列| 日韩视频在线一区| 136国产福利精品导航| 亚洲毛片av在线| 一区二区三区精品在线| 欧美日韩综合在线| 一区二区欧美亚洲| 性久久久久久| 国产农村妇女毛片精品久久麻豆 | 猛干欧美女孩| 国产精品国产三级国产aⅴ浪潮| 亚洲理论电影网| 亚洲一区二区精品在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 六十路精品视频| 亚洲电影免费| 欧美黄色大片网站| 一本一本a久久| 欧美一区精品| 欧美亚洲成人网| 午夜一区二区三区不卡视频| 久久米奇亚洲| 亚洲乱码国产乱码精品精| 欧美日韩在线免费观看| 亚洲电影免费观看高清完整版在线| 亚洲激情av在线| 欧美日精品一区视频| 亚洲欧美日韩中文播放| 欧美bbbxxxxx| 亚洲欧美色一区| 在线观看欧美成人| 久久久久九九九| 久久精品一二三| 国产精品日日摸夜夜摸av| 99国产精品视频免费观看一公开| 性8sex亚洲区入口| 亚洲欧洲另类国产综合| 另类春色校园亚洲| 亚洲午夜电影| 在线亚洲一区| 一区精品久久| 欧美日韩一区二区在线视频| 久久精品国产99国产精品| 亚洲精品系列| 欧美va天堂| 性感少妇一区| 一区二区三区国产| **网站欧美大片在线观看| 国产精品欧美精品| 欧美区在线播放| 久久综合给合久久狠狠狠97色69| 亚洲图片激情小说| 日韩午夜精品| 亚洲黄色尤物视频| 一区二区三区四区五区精品视频 | 国产精品ⅴa在线观看h| 久久综合五月| 欧美一区二区三区视频免费| 久久这里只有| 亚洲欧美在线网| 一区二区三区视频在线观看| 亚洲大胆女人| 影音先锋日韩资源| 国内精品嫩模av私拍在线观看 | 亚洲破处大片| 欧美成人影音| 夜夜狂射影院欧美极品| 亚洲国产精品黑人久久久 | 欧美激情中文字幕在线| 久久免费少妇高潮久久精品99| 亚洲一区二区三区在线看| 日韩午夜免费视频| 亚洲精品1区2区| 亚洲国产精品一区二区第四页av| 在线视频精品一区| 99国产精品| aa成人免费视频| 一本色道久久88综合亚洲精品ⅰ| 91久久精品一区| 亚洲精品久久久久久久久久久久久| 欧美午夜不卡视频| 欧美性大战久久久久久久| 欧美日韩一区二区精品| 欧美天天视频| 国产欧美一区二区视频| 国产日韩一区二区三区| 欧美激情乱人伦| 欧美伦理在线观看| 欧美色一级片| 国产欧美精品在线观看| 国产综合久久久久久鬼色| 在线电影院国产精品| 亚洲国产综合视频在线观看 | 欧美图区在线视频| 国产精品久久久久毛片软件| 国产伦精品一区二区三区照片91| 欧美精品激情| 国产精品久久久久久一区二区三区| 国产精品v欧美精品v日韩| 国产欧美精品xxxx另类| 亚洲第一区中文99精品| 日韩天堂av| 欧美一区激情视频在线观看| 久久综合网络一区二区| 最新成人在线| 亚洲伊人伊色伊影伊综合网 | 亚洲国产精品一区制服丝袜| av成人黄色| 欧美伊人影院| 亚洲欧美视频在线观看| 久久久蜜臀国产一区二区| 欧美激情一区二区三区在线视频 | 久久综合九色综合久99| 欧美日韩成人综合天天影院| 国产欧美精品在线播放| 亚洲人妖在线| 欧美怡红院视频一区二区三区| 免费成人黄色av| 一本色道久久综合一区| 久久裸体艺术| 国产精品久久激情| 亚洲高清自拍| 欧美在线免费视频| 亚洲茄子视频| 久久久久久久精| 国产精品久久久久7777婷婷| 在线日本欧美| 久久久久国产精品人| 在线视频欧美日韩精品| 亚洲在线一区|