1. 程式人生 > >Qt5.3.2外掛式開發入門例程--僅供參考

Qt5.3.2外掛式開發入門例程--僅供參考

工程結構:


原始碼:

-----------------PluginPerson.pro---------------

TEMPLATE = subdirs

SUBDIRS += xiaoming \
    person
-----------------person.pro-------------------
#-------------------------------------------------
#
# Project created by QtCreator 2015-07-27T11:41:44
#
#-------------------------------------------------

QT       += core
QT       -= gui

DESTDIR = ../../PluginPerson/exe

TARGET = person
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

HEADERS += \
    personinterface.h

---------------personinterface.h-----------------
#ifndef PERSONINTERFACE_H
#define PERSONINTERFACE_H

#include <QString>
#include <QtPlugin>

#define PersonInterface_IID "org.qt-project.Qt.Person"

class PersonInterface
{
public:
    virtual QString name()=0;
    virtual int age()=0;
    virtual void sing()=0;
};

Q_DECLARE_INTERFACE(PersonInterface, PersonInterface_IID)

#endif // PERSONINTERFACE_H

------------main.cpp------------
#include <QCoreApplication>
#include <QDebug>

#include <QPluginLoader>
#include <QFile>

#include "../person/personinterface.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug()<<"person....";

    QPluginLoader loader(QCoreApplication::applicationDirPath().append("/xiaoming.dll"));

    QObject *obj=qobject_cast<QObject *>(loader.instance());
    if(obj){
        PersonInterface *person=qobject_cast<PersonInterface *>(obj);
        if(person){
            qDebug()<<"load success!";
            qDebug()<<"name="<<person->name()<<", age="<<person->age();
            person->sing();
        }else{
            qDebug()<<"person error!";
        }
    }else{
        qDebug()<<"object error!";
    }

    return 0;
}

-----------------xiaoming.pro-----------------
#-------------------------------------------------
#
# Project created by QtCreator 2015-07-27T14:05:56
#
#-------------------------------------------------

QT       -= gui

TARGET = xiaoming
TEMPLATE = lib

DESTDIR = ../../PluginPerson/exe

SOURCES += xiaoming.cpp

HEADERS += xiaoming.h

unix {
    target.path = /usr/lib
    INSTALLS += target
}

OTHER_FILES += \
    Person.json
----------------xiaoming.h------------------
#ifndef XIAOMING_H
#define XIAOMING_H

#include "../person/personinterface.h"

class Xiaoming : public QObject, PersonInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID PersonInterface_IID FILE "Person.json")
    Q_INTERFACES(PersonInterface)
public:
    QString name();
    int age();
    void sing();
};

#endif // XIAOMING_H

---------------xiaoming.cpp--------------
#include "xiaoming.h"

#include <QDebug>

QString Xiaoming::name()
{
    return "xiaoming";
}

int Xiaoming::age()
{
    return 10;
}

void Xiaoming::sing()
{
    qDebug()<<"xiaoming sing ...";
}
--------------Person.json是一個空檔案--------------

執行效果:

 附:

下面是Qt官方文件上的一個例子

class FilterInterface
{
public:
    virtual ~FilterInterface() {}

    virtual QStringList filters() const = 0;
    virtual QImage filterImage(const QString &filter, const QImage &image,
                               QWidget *parent) = 0;
};
#include <QObject>
#include <QtPlugin>
#include <QStringList>
#include <QImage>

#include <plugandpaint/interfaces.h>

class ExtraFiltersPlugin : public QObject, public FilterInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PlugAndPaint.FilterInterface" FILE "extrafilters.json")
    Q_INTERFACES(FilterInterface)

public:
    QStringList filters() const;
    QImage filterImage(const QString &filter, const QImage &image,
                       QWidget *parent);
};


注意:經過測試,在Qt5中Q_PLUGIN_METADATA這一行是必須有的,否則外掛會載入不上。

(-----------完---------)



相關推薦

Qt5.3.2外掛開發入門--參考

工程結構: 原始碼: -----------------PluginPerson.pro--------------- TEMPLATE = subdirs SUBDIRS += xiaoming \ person -----------------p

【Qt學習】Qt入門Qt5.3.2+vs2010(中文版)+opencv2.4.9配置與簡單測試

【Qt學習--1】Qt入門之Qt5.3.2+vs2010(中文版)+opencv2.4.9配置與簡單測試 最近開始接觸Qt,起因就是想做個視覺化的操作介面來,剛好也看到相關的一些博文和資料,對Qt有比較詳盡的介紹,就動手安裝配置起來,下面就開始吧,記錄和分享一下我的安裝過程

Qt5.5.1和Qt5.3.2編譯OCI驅動教程及驗證方法

oracle下載 電腦 博客 size 版權 ring nbsp scott 所有 我們都知道oracle數據庫的強大,並且好多企業或者教學用到數據庫時都會推薦使用。但是Qt因為版權問題沒有封裝oracle數據庫專用驅動,網上也有一大堆說法和教程,但是或多或少的都有問題。下

使用idea maven開發spring boot 分布開發入門

desc scan 2.6 porting vid onf response username snapshot 1:使用idea創建一個maven工程 bos2 2:刪除bos2的src 文件夾,向pom.xml文件 中添加版本號 <packaging>

3.2 表達的類別與類型

含義 資料 因此 不同的 eof 類型 存儲器 器) 字節   在BASM的語句中,每一個表達式都必須能夠在編譯器中計算出準確的值或者尋址地址。如果不能滿足這個條件,語句不會被編譯通過。事實上,對於指令系統來說,每一個表達式都最終對應於一個確定的操作數。  因此,表達式的類

QT5.3.2在ARM上的移植

ubuntu10.04 準備移植phonon,4.5移植失敗。播放聲音就出錯。。。沒辦法。轉移到QtMutimedia 安裝交叉編譯工具這裡就不提了。。。 1.下載QT5.3.2:http://download.qt.io/archive/qt/ 不小下載5.0,這個版

vs2013 + qt5.3.2 環境搭建

1. PC: win8 2. vs版本: vs2013 3. qt版本: qt5.3.2 x64 opengl 4. vs-addin: qt-vs-addin-1.2.3-opensource.exe 一、安裝     vs和qt的安裝一律採用預設安裝; 建議修改qt的

VS2013編譯Qt5.3.2的靜態庫

今天用Qt寫了個小程式,拷到另一臺電腦發現無法執行,缺少檔案。查了一下資料,發現是動態連結庫的問題,因為原來一直用的微軟系列的開發工具,這個問題不怎麼突出,現在用Qt寫程式,這個問題就很麻煩了。     針對這個問題網上找到的資料有兩種解決方法,一是將程式需要的庫檔案放在一

【3D-slicer環境搭建之】vs2013 + qt5.3.2 環境搭建

開啟http://download.qt.io/archive/網址 下載qt及外掛,具體詳見 http://blog.csdn.net/haodemei2010/article/details/45484389

樹莓派Pi3+Qt5.3.2安裝PyQt5

安裝環境說明:樹莓派3(Raspberry Pi3——RASPBIAN JESSIE WITH PIXEL)+Qt5.3.2+Python2.7.9+ 樹莓派3帶Qt5.3.2的安裝包,需要自己手動從apt-get中下載 一、安裝SIP 從SIP的

FPGA實驗1-2:電路開發入門(DE0開發板)

FPGA 實驗 專案建立、編譯和下載 實驗一:用1個撥碼開關控制所有的LED燈亮滅 DE0手冊中的管腳對應 原理圖 RTL檢視 &結果顯示 FPGA 實驗 譯碼器組合邏輯 實驗一:2個2-4譯碼器模組,分別控制對應組的LE

[opencv]QT5.3.2配置opencv2.4.10及QT5.3.2+opencv2.4.10+vs2013配置

1.QT5.3.2配置opencv2.4.10 1.1QT5.3.2下載與安裝 下載網址: 選擇qt-opensource-windows-x86-msvc2013_opengl-5.3.2,下載後

QT5.3.2小白之路——UI介面設計以及正則表示式的說明

本文主要探討對UI介面設計過程中遇到的問題和解決辦法,同時也引出了很多的專業概念,供大家一起學習。 1、UI介面的繪製 1、新建QT Widget Application ,專案名稱為“Test”,基類選擇“QDialog”,類名保持“Dialog”不變,保持“建立介面”

QT5.6.2基於VS2013開發環境配置(Win7 64位)

2) 自動安裝上述兩個檔案,可選QT安裝路徑(如D盤),安裝完成之後開啟VS2013,可發現多出QT VS TOOLS選單      3) 開啟QT VS TOOLS選單下的Qt Options 選項,設定如下,即可完成QT配置         地址:http://ww

Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0開發平臺

引言 找了很多Python GUI工具集,還是覺得PyQt比較理想,功能強大跨平臺,還支援介面設計器。花一天時間折騰了Ubuntu14.04(32位)+ Python3.4 + Qt5.3.2 + PyQt5.3.2 + Eric6.0 的完整開發平臺的搭建,各種出錯差點放

vtk6.1.0+qt5.3.2+cmake2.8.12.2+win7+64位安裝配置過程

系統win7 64位,已裝vs2012,所有軟體安裝及開啟都用管理員身份。 下面詳細介紹QT和VTK結合開發的環境配置步驟 1.      下載軟體版本及地址 ①      qt的安裝檔案qt-opensource-windows-x86-msvc2012_opengl-5

在 Windows 上搭建基於Android Studio 3.2 的 Flutter 開發環境

路徑 ive http resolve 你是 arc 文件夾 mar 創建 1、安裝和配置好Android Studio 3.2 (Android Studio 的安裝路徑為:D:\Android\Android Studio;Android SDK路徑為:D:\Andro

從零開始實現ASP.NET Core MVC的外掛開發(一) - 使用ApplicationPart動態載入控制器和檢視

標題:從零開始實現ASP.NET Core MVC的外掛式開發(一) - 使用Application Part動態載入控制器和檢視 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11137788.html 原始碼:https://github.com/la

從零開始實現ASP.NET Core MVC的外掛開發(二) - 如何建立專案模板

標題:從零開始實現ASP.NET Core MVC的外掛式開發(二) - 如何建立專案模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155666.html 原始碼:https://github.com/lamondlu/DynamicPlugin

零基礎ASP.NET Core MVC外掛開發

零基礎ASP.NET Core MVC外掛式開發 一個專案隨著業務模組的不斷增加,系統會越來越龐大。如果參與開發的人員越多,管理起來也難度也很大。面對這樣的情況,首先想到的是模組化外掛式開發,根據業務模組,拆分成各個獨立的外掛,然後分配不同開發人員開發,互相之間沒有依賴完全獨立。 這裡介紹一種使用ASP.