利用Qt插件实现HellowWord

这一部分内容参见

wKiom1TbG3Gib0rOAAIXQWtZtDo533.jpg

俺就挑最常见的说了

wKioL1TbGCPTOiBPAADDcXRU0ow470.jpg


选择 Library C++库

wKiom1TbF27BtnKOAACiagehzKk433.jpg

选择Qt Plugin(共享库和静态链接库这一部分和Qt技术关系不大,本博客就不提了)

新建完了其目录结构如下

wKioL1TbGUiRLwF1AABpvwR80iM160.jpg

添加一个头文件

#ifndef TEST_H
#define TEST_H

#include <iostream>
#include <QString>

class Test{
public:
    virtual ~Test(){}
    virtual void doSomeThing(){
        std::cout<< "Hellow Word!"<<std::endl;
    }
};

QT_BEGIN_NAMESPACE

#define __PLUGINTEST_iid "org.qt-project.Qt.QGenericPluginFactoryInterface"

Q_DECLARE_INTERFACE(Test, __PLUGINTEST_iid)
QT_END_NAMESPACE

#endif // TEST_H

注意使用 Q_DECLARE_INERFACE将一个类跟一个字符串("这个字符串应该是惟一的")映射起来



修改genericplugin.h

#ifndef GENERICPLUGIN_H
#define GENERICPLUGIN_H

#include <QObject>
#include <QtPlugin>
#include "test.h"

class GenericPlugin :
        public QObject,
        public virtual Test
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID __PLUGINTEST_iid  )
    Q_INTERFACES(Test)

public:
    GenericPlugin(QObject *parent = 0);
};

#endif // GENERICPLUGIN_H


修改genericplugin.cpp

#include "genericplugin.h"

GenericPlugin::GenericPlugin(QObject *parent) :
    QObject(parent)
{
}

#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(untitled16, GenericPlugin)
#endif // QT_VERSION < 0x050000

修改pro文件

QT       += core gui
TARGET = untitled16
TEMPLATE = lib
CONFIG += plugin

SOURCES += genericplugin.cpp

HEADERS += genericplugin.h \
    test.h

生成plugin,如果还有疑问可以参考Qt\Examples\Qt-5.4\widgets\tools\echoplugin这个例子

wKioL1TbI8-DN3OMAAHnhps7h70024.jpg


这一部分来说使用plugin

#include <QCoreApplication>
#include <iostream>
#include <cstdlib>
#include <QPluginLoader>
#include <QDebug>
#include <test.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //plugin 路径 这个路径最好在 qt.conf 文件里面定义....
    QPluginLoader pluginLoader(R"(C:\Temp\qqqqq\build-untitled16-Desktop_Qt_5_4_0_MinGW_32bit-Debug\debug\untitled16.dll)");
    QObject * obj = pluginLoader.instance();
    if(obj){
        Test * test = qobject_cast< Test * >(obj);
        if(test){
            test->doSomeThing();
            delete test;
        }
    }else{
        qDebug()<< pluginLoader.errorString();
    }

}


你可能感兴趣的:(word,qt,hello,Qt插件)