记录一下QT5 动态链接库的创建和使用
在文章的最后有完毕的代码供下载
1.创建动态链接库
先新建一个库项目
选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld

再点击下一步到

假设这里我们须要QtGui所以也勾选上了
再点击下一步直到完毕
我们在.pro文件中加上
DESTDIR =..MyDebug
它的意思是我们把生成的内容放到这个目录里,假设没有它会自己主动生成
点击项目把Shadow build 去掉勾选

设置完毕后我们来实现方法測试
把sld.h改动成这样
#include "sld_global.h" #include <QString>
class SLDSHARED_EXPORT Sld { public :
讯享网Sld(); QString GetStr();
};
#endif
它的.cpp
#include "sld.h" #include <QDebug>
Sld::Sld() {
讯享网qDebug()</span><<<span style="margin:0px; padding:0px; color:rgb(128,0,0); line-height:1.5!important">""</span><span style="margin:0px; padding:0px; line-height:1.5!important">;
}
QString Sld::GetStr() {
</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">return</span> <span style="margin:0px; padding:0px; color:rgb(128,0,0); line-height:1.5!important">"</span><span style="margin:0px; padding:0px; color:rgb(128,0,0); line-height:1.5!important">aa</span><span style="margin:0px; padding:0px; color:rgb(128,0,0); line-height:1.5!important">"</span><span style="margin:0px; padding:0px; line-height:1.5!important">;
}
我们那了一个測试方法返回aa
我们再新加入一个窗口供測试用

我给命名为MyDialog
把.h文件改动成
讯享网#ifndef MYDIALOG_H #define MYDIALOG_H
#include <QDialog> #include "sld_global.h" namespace Ui { class MyDialog; }
class SLDSHARED_EXPORT MyDialog : public QDialog {
Q_OBJECT
public:
讯享网</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">explicit</span> MyDialog(QWidget *parent = <span style="margin:0px; padding:0px; color:rgb(128,0,128); line-height:1.5!important">0</span><span style="margin:0px; padding:0px; line-height:1.5!important">); </span>~<span style="margin:0px; padding:0px; line-height:1.5!important">MyDialog();
private:

Ui::MyDialog </span>*<span style="margin:0px; padding:0px; line-height:1.5!important">ui;
};
#endif // MYDIALOG_H
,cpp
讯享网#include "mydialog.h" #include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent), ui(</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">new</span><span style="margin:0px; padding:0px; line-height:1.5!important"> Ui::MyDialog)
{
讯享网ui</span>->setupUi(<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">this</span><span style="margin:0px; padding:0px; line-height:1.5!important">);
}
MyDialog::~MyDialog() {
delete ui;
}
这里什么也没做仅仅是把SLDSHARED_EXPORT加上了
好了就这样。我们构建一下就会在MyDebug目录里生成我们的dll
2.怎么使用动态链接库
新建一个Qt WidgetsApplication项目

在.pro文件中改动和上边一样加上
DESTDIR =..MyDebug 再点击项目把shadow build 去掉
再加上
讯享网INCLUDEPATH +=https://www.u72.net/sld LIBS += -L$$DESTDIR -lsld
第一句是把sld项目的目录包括到这个项目里来,这样我们就能直接用它里面的头文件了
第二句是告诉编译器lib在哪(我用的是vs的编译器假设 用mingw能够直接加入sld.dll)
我样在窗口上加一个button,并加入槽
.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow {
讯享网Q_OBJECT
public:
</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">explicit</span> MainWindow(QWidget *parent = <span style="margin:0px; padding:0px; color:rgb(128,0,128); line-height:1.5!important">0</span><span style="margin:0px; padding:0px; line-height:1.5!important">); </span>~<span style="margin:0px; padding:0px; line-height:1.5!important">MainWindow();
private slots:
讯享网</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">void</span><span style="margin:0px; padding:0px; line-height:1.5!important"> on_pushButton_clicked();
private:
Ui::MainWindow </span>*<span style="margin:0px; padding:0px; line-height:1.5!important">ui;
};
#endif // MAINWINDOW_H
.cpp
讯享网#include "mainwindow.h" #include "ui_mainwindow.h" #include "sld.h" #include <QMessageBox> #include "mydialog.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(</span><span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">new</span><span style="margin:0px; padding:0px; line-height:1.5!important"> Ui::MainWindow)
{
讯享网ui</span>->setupUi(<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">this</span><span style="margin:0px; padding:0px; line-height:1.5!important">);
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::on_pushButton_clicked() {
讯享网MyDialog </span>* my =<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">new</span> MyDialog(<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">this</span><span style="margin:0px; padding:0px; line-height:1.5!important">); my</span>-><span style="margin:0px; padding:0px; line-height:1.5!important">show(); QMessageBox </span>* msg=<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">new</span> QMessageBox(<span style="margin:0px; padding:0px; color:rgb(0,0,255); line-height:1.5!important">this</span><span style="margin:0px; padding:0px; line-height:1.5!important">); Sld s; msg</span>-><span style="margin:0px; padding:0px; line-height:1.5!important">setText(s.GetStr()); msg</span>-><span style="margin:0px; padding:0px; line-height:1.5!important">show();
}
好了,构建,执行看效果吧


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/193176.html