首先我们生成插件的项目和加载插件的项目必须是同一个qt版本
为了确保万无一失 关闭build
.h文件
#ifndef ABC_H
#define ABC_H
#include "abc_global.h"
class ABC_EXPORT Abc
{
public:
Abc();
int max(int a, int b);
int min(int a, int b);
};
#endif // ABC_H
.cpp文件
#include "abc.h"
Abc::Abc()
{
}
int Abc::max(int a, int b)
{
if (a>b) {
return a;
} else {
return b;
}
}
int Abc::min(int a, int b)
{
if (a<b) {
return a;
} else {
return b;
}
}
接下来点击编译不点运行 在文件夹里会生成这两个文件
在创建在即加载插件的项目
这里还是要选msvc64
在bbc项目里面创建文件夹lib再将刚才的lib和dll文件复制进去
再见.h头文件复制到项目目录下
在.pro文件中增加
LIBS +=-L$$PWD/lib -labc #动态库头文件以及动态库的位置
bbc.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
在ui文件里面拖上两个push button按钮 然后转到槽函数
#include "mainwindow.h"
#include "ui_mainwindow.h"
using namespace std;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int _min;
_min = min(5, 8);
qDebug("min :%d", _min);
}
void MainWindow::on_pushButton_2_clicked()
{
int _max;
_max = max(5, 8);
qDebug("max :%d", _max);
}
下面补充第一种改变
将.h文件和.dll 和.lib文件都放进lib文件夹下
INCLUDEPATH += $$PWD/lib
LIBS +=-L$$PWD/lib -labc #动态库头文件以及动态库的位置
导入文件
#include "lib/abc.h"
#include "lib/abc_global.h"
再将头文件放进lib文件夹
第二种鼠标右击项目文件添加库
添加库->外部库->选择外部库的文件路径,确认Lib库加载的路径。取消mac和linux的选中,选择静态加载
加载完成后.pro文件中会增加如下代码。
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../abc/release/ -labc
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../abc/debug/ -labc
INCLUDEPATH += $$PWD/../abc/release
DEPENDPATH += $$PWD/../abc/release
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../abc/release/libabc.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../abc/debug/libabc.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../abc/release/abc.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../abc/debug/abc.lib
这样不用导入.h文件和dll文件就可以运行 可以将之前的lib文件夹删掉
如果选择动态加载也是可以运行 .pro文件夹中增加如下代码
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../abc/release/ -labc
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../abc/debug/ -labc
INCLUDEPATH += $$PWD/../abc/release
DEPENDPATH += $$PWD/../abc/release```
接下来研究静态加载和动态加载有什么区别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)