1. 程式人生 > 實用技巧 >QT5 動態連結庫的建立和使用

QT5 動態連結庫的建立和使用

記錄一下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