Qt共享库、静态库、Qt Plugin的创建和加载。
- Qt共享库的创建;
Qt新建文件或项目,选择Library,选择C++库,选择共享库,代码如下:
//.h
#ifndef MYSHAREDLIBRARY_H
#define MYSHAREDLIBRARY_H
#include "mysharedlibrary_global.h"
class MYSHAREDLIBRARYSHARED_EXPORT MySharedLibrary
{
public:
MySharedLibrary();
int sum(int a, int b);
};
int MYSHAREDLIBRARYSHARED_EXPORT sum(int a, int b);
#endif // MYSHAREDLIBRARY_H
//.cpp
#include "mysharedlibrary.h"
MySharedLibrary::MySharedLibrary()
{
}
int MySharedLibrary::sum(int a, int b)
{
return a+b;
}
int sum(int a, int b)
{
return a+b;
}
- Qt静态库的创建;
Qt新建文件或项目,选择Library,选择C++库,选择静态链接库,代码如下:
//.h
#ifndef STATICLIBRARY_H
#define STATICLIBRARY_H
class StaticLibrary
{
public:
StaticLibrary();
int sum(int a, int b);
};
int sum1(int a, int b);
#endif // STATICLIBRARY_H
//.cpp
#include "staticlibrary.h"
StaticLibrary::StaticLibrary()
{
}
int StaticLibrary::sum(int a, int b)
{
return a+b;
}
int sum1(int a, int b)
{
return a+b;
}
- Qt Plugin的创建;Qt新建文件或项目,选择Library,选择C++库,选择Qt Plugin,代码如下:
//接口编写
#ifndef MYINTERFACETEST_H
#define MYINTERFACETEST_H
#include <QObject>
#include <QString>
class MyInterfaceTest: public QObject
{
Q_OBJECT
public:
MyInterfaceTest(QObject *parent = 0):QObject(parent) {}
virtual ~MyInterfaceTest() {}
virtual QString filters() const = 0;
virtual int loader() const = 0;
};
Q_DECLARE_INTERFACE(MyInterfaceTest, “com.mashijie.interface”)
#endif // MYINTERFACETEST_H
//创建插件
//.h
#ifndef GENERICPLUGIN_H
#define GENERICPLUGIN_H
#include <QGenericPlugin>
#include <myinterfacetest.h>
class GenericPlugin : public MyInterfaceTest
{
Q_OBJECT
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "com.mashijie.interface" FILE "QtPluginTest.json")
#endif // QT_VERSION >= 0x050000
Q_INTERFACES(MyInterfaceTest)
public:
GenericPlugin(QObject *parent = 0);
virtual QString filters() const;
virtual int loader() const;
};
#endif // GENERICPLUGIN_H
//.cpp
#include "genericplugin.h"
GenericPlugin::GenericPlugin(QObject *parent) :
MyInterfaceTest(parent)
{
}
QString GenericPlugin::filters() const
{
return QString("ddd");
}
int GenericPlugin::loader() const
{
return 2;
}
#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2(QtPluginTest, GenericPlugin)
#endif // QT_VERSION < 0x050000
//.main
#include <QCoreApplication>
#include <QDebug>
#include <mysharedlibrary.h>
#include <staticlibrary.h>
#include <QDir>
#include <QPluginLoader>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << sum(1, 4);
//共享库调用,编译需要头文件和lib,运行时需要dll
MySharedLibrary mySharedLibrary;
qDebug() << mySharedLibrary.sum(1,2);
qDebug() << sum1(1, 6);
//静态链接库调用,只需要编译即可,需要头文件和lib
StaticLibrary staticLibrary;
qDebug() << staticLibrary.sum(1,2);
//插件加载,把插件生成的dll放在指定目录下即可
QDir pluginsDir(qApp->applicationDirPath());
pluginsDir.cd("plugins");
foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.dll", QDir::Files))
{
QPluginLoader *loader = new QPluginLoader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader->instance();
qDebug() << fileName;
}
return a.exec();
}
版权声明:本文为qq_37520876原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。