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)

    我样在窗体上加一个按钮,并添加槽

    .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

  • 相关阅读:
    DDK 的一些笔记
    C# 32位程序访问64位系统注册表
    自己对设备栈的理解
    简单驱动编写与windbg调试
    DDK 的一些笔记other
    USB设备的一些概念
    C# 32位程序与64位程序读\写注册表的区别
    dbca建库时找不到ASM磁盘
    sf01_什么是数据结构
    cPickle.dump函数
  • 原文地址:https://www.cnblogs.com/li-peng/p/3844614.html
Copyright © 2011-2022 走看看