QT5 動態連結庫的建立和使用
阿新 • • 發佈:2021-01-10
記錄一下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)
我樣在窗體上加一個按鈕,並新增槽
.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(); }
好了,構建,執行看效果吧
原始碼:sharelibDemo.7z