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)

我样在窗口上加一个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();
}
复制代码

好了,构建,执行看效果吧





原文地址:https://www.cnblogs.com/gavanwanggw/p/7225660.html