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

逛奔的蝸牛

我不聰明,但我會很努力

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

創建一個QT的庫項目,刪除自動生成的.h和.cpp文件,添加一個接口定義.h文件和一個接口實現類(一個.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.接口實現類頭文件

#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.接口實現類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的元數據,而在代碼中手動添加Q_OBJECT宏后,編譯器不會自動為我們生成moc_XXXX.cpp文件,因此需要使用命令行生成moc元數據文件:cmd-->cd 源碼所在命令 -->moc -o moc_XXXX.cpp XXXX.h.這樣就可以手動創建出moc元數據文件,解決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文件同目錄的文件嘗試加載插件,如果加載成功則返回.代碼實現非常簡潔.在正式開發中可將已加載的插件接口存放在列表中,在需要的時候依次調用即可.

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

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

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

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

posted on 2013-06-25 23:26 逛奔的蝸牛 閱讀(2072) 評論(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>
            性做久久久久久久久| 欧美高清视频一区二区| 亚洲欧美日韩直播| 麻豆久久婷婷| 亚洲视频999| 欧美国产精品日韩| 精品成人免费| 国产农村妇女毛片精品久久莱园子| 亚洲精品一区二区三区99| 久久一区中文字幕| 欧美日韩久久久久久| 99pao成人国产永久免费视频| 亚洲欧美综合网| 国产精品久久久久高潮| 亚洲国产精品久久久| 亚洲欧美精品一区| 亚洲精选在线观看| 欧美黑人在线播放| 国产亚洲欧美日韩精品| 销魂美女一区二区三区视频在线| 一区二区激情小说| 欧美成人精品一区| 久久嫩草精品久久久精品一| 欧美专区18| 欧美高清影院| 午夜影视日本亚洲欧洲精品| 欧美视频三区在线播放| 亚洲视频每日更新| 亚洲特黄一级片| 国产综合网站| 亚洲国产精品久久久久婷婷884| 亚洲一区二区三区午夜| 欧美成人dvd在线视频| 欧美日韩情趣电影| 久久国产精品黑丝| 亚洲在线免费| 久久亚洲精品视频| 久久亚洲欧美| 亚洲国产成人在线| 国产一区二区成人| 欧美日韩一区二区在线| 在线亚洲观看| 免费永久网站黄欧美| 精品电影在线观看| 久久国产精品72免费观看| 亚洲你懂的在线视频| 国产精品久久久久高潮| 亚洲欧美美女| 国产欧美日韩一区| 欧美大胆a视频| 久久综合狠狠综合久久激情| 在线观看精品视频| 媚黑女一区二区| 欧美成人网在线| 亚洲国产专区校园欧美| 久久午夜视频| 欧美成人国产一区二区| 欧美韩日一区二区| 亚洲精品一区在线观看香蕉| 亚洲精品国产精品国自产观看 | 亚洲日本成人| 欧美日韩和欧美的一区二区| 99国产精品久久久久久久久久| 亚洲精品乱码久久久久| 久久精品视频亚洲| 亚洲精品五月天| 亚洲午夜视频| 在线播放豆国产99亚洲| 亚洲国产精品99久久久久久久久| 欧美日韩亚洲一区二区| 久久精品亚洲国产奇米99| 欧美 日韩 国产精品免费观看| 日韩一级网站| 午夜精品亚洲一区二区三区嫩草| 狠狠色伊人亚洲综合成人| 亚洲国产精品第一区二区| 免费一区视频| 国产伦精品一区二区三区高清版| 亚洲午夜精品一区二区三区他趣| 亚洲婷婷在线| 久久大逼视频| 在线亚洲激情| 久久精品久久99精品久久| 亚洲精品1234| 亚洲欧美日韩国产成人精品影院| 国产精品一区二区在线| 中国亚洲黄色| 亚洲精品少妇30p| 性亚洲最疯狂xxxx高清| 在线亚洲欧美| 老司机午夜精品视频| 欧美一区二区三区精品| 欧美精品观看| 欧美大片91| 9色porny自拍视频一区二区| 欧美日韩免费观看一区三区| 欧美亚洲综合另类| 欧美精品色网| 狂野欧美性猛交xxxx巴西| 国产精品专区h在线观看| 99天天综合性| 99av国产精品欲麻豆| 牛人盗摄一区二区三区视频| 久久午夜精品一区二区| 国产精自产拍久久久久久| 99精品热6080yy久久| 一区二区三区精品视频在线观看| 欧美顶级大胆免费视频| 欧美激情性爽国产精品17p| 亚洲第一精品在线| 国产精品久久久免费| 欧美国产亚洲精品久久久8v| 欧美中在线观看| 在线性视频日韩欧美| 国产精品露脸自拍| 国产精品国产馆在线真实露脸| 欧美.www| 男女精品网站| 欧美精品久久久久久久免费观看| 91久久午夜| 欧美**字幕| 久久精品欧洲| 黄色成人在线免费| 亚洲一区在线免费观看| 午夜天堂精品久久久久 | 国产精品毛片va一区二区三区 | 伊人久久综合97精品| 亚洲免费观看高清完整版在线观看| 国产精品一区二区在线观看不卡| 亚洲美女黄网| 99精品国产热久久91蜜凸| 国产精品爱久久久久久久| 欧美韩日一区| 亚洲国产成人不卡| 亚洲在线视频网站| 欧美黑人在线播放| 亚洲激情二区| 久久精品日韩欧美| 狠狠色综合播放一区二区| 亚洲欧美春色| 亚洲精品在线观看视频| 亚洲国产精彩中文乱码av在线播放| 亚洲一区二区日本| 欧美v日韩v国产v| 香港久久久电影| 免费一区视频| 国产精品一区二区三区观看| 中日韩高清电影网| 最新日韩精品| 亚洲精品色婷婷福利天堂| 久久精品欧美日韩| 欧美一级大片在线观看| 狠狠做深爱婷婷久久综合一区| 久久人人97超碰精品888| 久久成人一区| 国产一区二区三区四区三区四| 久久综合中文| 99精品国产一区二区青青牛奶| 欧美在线亚洲综合一区| 亚洲欧美精品伊人久久| 免费在线视频一区| 亚洲在线免费| 伊人天天综合| 欧美午夜一区| 久久久久久亚洲精品杨幂换脸 | 欧美成人一品| 国产中文一区二区| 亚洲欧美日本国产有色| 国内久久婷婷综合| 国内精品国语自产拍在线观看| 亚洲在线观看| 午夜视黄欧洲亚洲| 国产精品制服诱惑| 久久久免费精品| 免费成人在线观看视频| 亚洲盗摄视频| 亚洲欧美日韩人成在线播放| 在线亚洲欧美视频| 国产精品少妇自拍| 亚洲在线第一页| 欧美mv日韩mv国产网站| 久久精品综合网| 麻豆精品在线观看| 国产欧美日韩一区| 亚洲少妇诱惑| 国产精品捆绑调教| 亚洲欧美日韩国产中文在线| 欧美一区二区三区在线视频| 蜜桃av噜噜一区二区三区| aa级大片欧美| 亚洲永久网站| 久久9热精品视频| 亚洲一区在线观看视频| 亚洲视频在线观看三级| 亚洲精品影院| 亚洲丝袜av一区| 这里只有精品视频在线| 国产真实精品久久二三区| 国产精品午夜在线| 国产精品欧美日韩一区|