成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在MeeGo Qt應用程序中加載插件

移動開發
插件機制是一種擴展現有程序的機制。插件允許第三方開發者在無需訪問主程序源代碼的情況下來擴展該程序。Qt Plugin和其他類型的插件一樣,是一種計算機應用程序,它和主應用程序(host application)互相交互,以提供特定的功能。

QT 插件簡介

什么是插件

插件機制是一種擴展現有程序的機制。插件允許第三方開發者在無需訪問主程序源代碼的情況下來擴展該程序。插件能夠應用的各項服務,包括提供加載方式,使插件可以加載到應用程序和網絡傳輸協議中,從而和插件進行數據交換等。簡而言之,插件是提供特定接口的庫。

QT插件的兩種類型:

Qt Plugin和其他類型的插件一樣,是一種計算機應用程序,它和主應用程序(host application)互相交互,以提供特定的功能。應用程序支持Plugin有許多原因,一些主要原因包括:使得第三方開發者有能力擴展應用程序,以提供無法先期預料的特色;減小應用程序的大小;由于軟件版權之間的不兼容性將源代碼和應用程序分享。Qt Plugin 分動態插件和靜態插件兩種。

1.靜態插件能夠靜態的鏈接到應用程序,使得部署更少出錯,但是應用程序重新構建和發布時難以增加新的功能;

2.動態插件是更常用到和更靈活的方式,可以單獨發布,并且可以在運行時檢測和加載;

QT插件的實現步驟

 

如何去實現一個動態插件

1 定義接口類:
1.1.定義共同接口(純虛類):
程序要能感知插件,需要程序和插件共同遵守某種規則。于是需要在主程序中定義一個共同的接口,該接口直接和插件類交流;
本例中定義一個QContactPlugin interface
//QContactPluginInterface.h
#include
class QContactPluginInterface
{
public:
virtual ~ QContactPluginInterface () {}
virtual int getContact(int v) = 0;
};

1.2.使用宏Q_DECLARE_INTERFACE()
在QContactPluginInterface.h中添加以下代碼:
Q_DECLARE_INTERFACE(QContactPluginInterface, "com.intel.Plugin. QContactPluginInterface ");
Q_DECLARE_INTERFACE定義在在qobject.h中,用來告訴Qt meta-object system 這個接口名稱.

2.主程序部分:
主程序部分動態加載插件的代碼如下:
QDir pluginsDir(qApp->applicationDirPath());
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = pluginLoader.instance();
if (plugin) {
QContactPluginInterface *interface = qobject_cast(plugin);
if (interface) {
qDebug()< getContact (10);
}
}
}
以上這段代碼主要包含以下幾個步驟:
2.1.到指定路徑搜索插件
QDir pluginsDir(qApp->applicationDirPath());
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
2.2.檢測并加載插件.
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));

2.3.測試插件是否有效
使用 qobject_cast()測試插件是否給出了相應接口并進行類型轉換,轉換成接口對象指針.
QContactPluginInterface *interface = qobject_cast(plugin);
if (interface) {
qDebug()< getContact (10);
}

#p#

3.編寫插件:
pluginXX.h
//Exampel, pluginXX.h
#include
#include " QContactPluginInterface.h"

class PluginXX:public QObject, public QContactPluginInterface
{
Q_OBJECT
Q_INTERFACES(QContactPluginInterface)
public:
PluginXX(QObject *parent=NULL);
int getContact (int v);
};
pluginXX.cpp
// Exampel pluginXX.cpp
#include "pluginXX.h"
PluginXX::PluginXX(QObject *parent)
:QObject(parent)
{
}
int PluginXX::getContact(int v)
{
//todo
return XXNumber;
}
Q_EXPORT_PLUGIN2(pluginXX, PluginXX);
以上這段代碼主要包含以下幾個步驟:

3.1.聲明插件類,
#include
#include " QContactPluginInterface.h"

class PluginXX:public QObject, public QContactPluginInterface
這個類繼承QObject 類和接口類,同時注意,需要將接口類的頭文件包含。

3.2.使用宏Q_INTERFACES()
Q_INTERFACES(QContactPluginInterface)
Q_INTERFACES 使用在定義接口類時通過Q_DECLARE_INTERFACE聲明過的接口。它同樣是用來告訴Qt的moc系統,將使用QContactPluginInterface這個接口。

3.3.輸出插件
Q_EXPORT_PLUGIN2(pluginXX, PluginXX);
使用宏 Q_EXPORT_PLUGIN2()是讓Qt知道PluginXX是一個插件,第一個參數是插件的名字,第二個參數是庫的名字,所以二者經常是相同的。

3.4.構建插件.
#pluginXX.pro
TEMPLATE = lib
CONFIG += plugin
INCLUDEPATH += ../XX
HEADERS = pluginXX.h
SOURCES = pluginXX.cpp
DESTDIR = ../
由以上.pro文件,Qt會自動將其編譯為動態插件,在主程序運行時動態加載。
 

責任編輯:佚名 來源: Intel軟件網絡博客
相關推薦

2010-10-15 09:39:22

MeeGoQt

2010-05-02 14:35:47

Meego開發

2011-06-07 09:36:41

BlackBerry 應用程序

2010-11-18 15:52:32

QMLMeeGo

2011-06-16 13:23:35

Qt 模塊化 插件式

2019-08-13 15:39:27

Linux應用程序

2011-07-05 17:07:46

Qt 插件 模塊

2011-06-09 09:12:12

QT symbian

2011-07-05 16:59:15

Qt 動態 鏈接庫

2018-03-28 08:30:01

Linux倉庫應用程序

2024-03-25 00:02:00

Android移動開發視頻

2018-10-29 10:13:29

Windows 10應用程序卸載

2011-06-27 17:24:37

Qt 插件

2011-01-28 09:12:53

jQuery Mobi

2016-08-02 10:34:17

LinuxWindows雙啟動

2013-04-02 15:23:12

2019-01-04 10:45:31

Windows 10Android應用程序

2014-06-26 15:17:17

安卓應用保存數據

2010-05-23 11:13:53

Widget開發

2011-06-14 14:57:06

QT Python GUI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女久久久久 | 国产欧美在线播放 | 男人天堂网址 | 欧美日韩成人在线 | 亚洲人人 | 精品国产乱码久久久久久蜜臀 | 男女av| 日韩精品一区二区三区视频播放 | 久久久久久免费免费 | 国产一区91精品张津瑜 | 亚州春色 | 91一区二区 | 国产精品看片 | 精品国产一区二区在线 | 国产精品久久久久久久久久99 | 国产精品日韩欧美一区二区三区 | 在线观看国产视频 | 欧美一区二区三区一在线观看 | 国产亚洲精品美女久久久久久久久久 | 色欧美综合 | 狠狠干综合视频 | 亚州精品天堂中文字幕 | 亚洲国产一区二区三区在线观看 | 成人小视频在线观看 | 91精品国产综合久久久亚洲 | 日韩一区二区三区视频在线观看 | 黄篇网址 | 精品一区在线 | 一区二区三区四区视频 | 91综合网| 99久久婷婷国产亚洲终合精品 | 综合色影院 | 日本精品一区二区三区视频 | 亚洲国产精品激情在线观看 | 久色视频在线观看 | 国产成人精品一区二区三区在线 | 91精品国产色综合久久 | 免费观看色 | 九九久久久久久 | 欧美精品一区二区三区在线播放 | 午夜视频一区二区三区 |