记录一下QT5 动态链接库的创建和使用
在文章的最后有完毕的代码供下载
1.创建动态链接库
先新建一个库项目
选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld
再点击下一步到
假设这里我们须要QtGui所以也勾选上了
再点击下一步直到完毕
我们在.pro文件中加上
DESTDIR =..\MyDebug
它的意思是我们把生成的内容放到这个目录里,假设没有它会自己主动生成
点击项目把Shadow build 去掉勾选
设置完毕后我们来实现方法測试
把sld.h改动成这样
#ifndef SLD_H #define 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()<<""; } QString Sld::GetStr() { return "aa"; }
我们那了一个測试方法返回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: explicit MyDialog(QWidget *parent = 0); ~MyDialog(); private: Ui::MyDialog *ui; }; #endif // MYDIALOG_H
,cpp
#include "mydialog.h" #include "ui_mydialog.h" MyDialog::MyDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MyDialog) { ui->setupUi(this); } MyDialog::~MyDialog() { delete ui; }
这里什么也没做仅仅是把SLDSHARED_EXPORT加上了
好了就这样。我们构建一下就会在MyDebug目录里生成我们的dll
2.怎么使用动态链接库
新建一个Qt WidgetsApplication项目
在.pro文件中改动和上边一样加上
DESTDIR =..\MyDebug 再点击项目把shadow build 去掉
再加上
INCLUDEPATH +=../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: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *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(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { MyDialog * my =new MyDialog(this); my->show(); QMessageBox * msg=new QMessageBox(this); Sld s; msg->setText(s.GetStr()); msg->show(); }
好了,构建,执行看效果吧
时间: 2024-10-15 14:20:49