• 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

  • 相关阅读:
    解决:TypeError: object() takes no parameters
    刷题(三)
    刷题(二)
    web自动化流程总结
    不能在Python Console中运行pytest
    关于pytest的一些问题
    UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView
    android系统下消息推送机制
    Android中的动画,选择器,样式和主题的使用
    内存监测工具 DDMS --> Heap
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14258062.html
Copyright © 2020-2023  润新知