zoukankan      html  css  js  c++  java
  • 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();
    }
    复制代码

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





  • 相关阅读:
    介绍一款能取代 Scrapy 的 Python 爬虫框架
    盘点 Django 展示可视化图表的多种方式(建议收藏)
    阿里最强 Python 自动化工具开源了!
    推荐一款小众且好用的 Python 爬虫库
    该死的端口占用!教你用 Shell 脚本一键干掉它!
    字节跳动实习面经分享(已拿offer附攻略)
    这样给小白讲原码、反码、补码,帮她彻底解决困扰了三天的问题
    并查集是一种怎样的数据结构?
    约瑟夫环问题的三种解法,一文搞定
    数据结构:栈详解
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7225660.html
Copyright © 2011-2022 走看看