C++:QT封装带控件的dll文件使用

本文介绍了如何在Qt5.14.2环境中创建并使用C++DLL库,包括创建工程库、配置CMake、编写message类及其头文件,以及在另一个Qt应用中链接和调用DLL。
摘要由CSDN通过智能技术生成

在qt开发中,由于一些公共组件可复用,故可以封装成一个dll文件在其项目中引入使用

环境

Qt5.14.2 mingw73_64  Cmake3.25.0

准备:创建dll工程库

在qt creator创建一个Library如下图步骤所示:

1. 选择C++ Library

2. 选择Cmake构建项目

 3. 选择Widgets【重点 选择Widgets是构建控件使用】

 

4. 选择MinGW 64位构建 

 

5. 创建完成一个工程目录 

6. 出现下图说明构建成功了【在项目外面目录可以看到有Debug构建目录了】

 dll工程代码

message.cpp

#include "message.h"

Message::Message(QWidget *parent)
    : QWidget(parent)
{
    this->resize(100,200);
}
void Message::info(){
    msgbox->information(this,"提示","此操作不可逆");
}
Message::~Message(){

}

message.h

这里把生成的message_global.h里的代码拷过来直接放在message.h中,在需要此dll封装文件就不需要单独在引message_global.h文件了

#ifndef MESSAGE_H
#define MESSAGE_H
#if defined(MESSAGE_LIBRARY)
#  define MESSAGE_EXPORT Q_DECL_EXPORT
#else
#  define MESSAGE_EXPORT Q_DECL_IMPORT
#endif
#include <QWidget>
#include <QMessageBox>
#include <QDebug>
class Message: public QWidget
{
    Q_OBJECT
public:
    explicit Message(QWidget *parent = nullptr);
    ~Message();
public slots:
    void info();
private:
    QMessageBox *msgbox;
    QWidget *widget;
};

#endif // MESSAGE_H

1. 在qt creator构建debug或release成功之后如下图

    这里生成dll文件和.a文件可以在另一个工程使用了

使用封装好的dll

在qt creator中创建一个 application->Qt Widgets Application 工程

创建完成一个qt项目在该工程创建两个目录如图:

在将 libmessage.dll文件放在该工程外面debug目录中【有可执行文件.exe】 如图

使用

cmake.txt

cmake_minimum_required(VERSION 3.5)

project(usedll LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

#CMAKE_CURRENT_SOURCE_DIR 当前目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_executable(usedll
        main.cpp
        mainwindow.cpp
        mainwindow.h
)

target_link_libraries(usedll PRIVATE Qt5::Widgets ${CMAKE_CURRENT_SOURCE_DIR}/lib/libmessage.dll.a )

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent) {
    this->resize(400,300);
    btn = new QPushButton(this);
    btn->move(100,100);
    btn->setText("调用dll中弹框");
    connect(btn,SIGNAL(clicked()),this, SLOT(toclick()));
    msg = new Message(this);
}
void MainWindow::toclick(){
    msg->info();
}
MainWindow::~MainWindow() {
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QDebug>
#include "include/message.h" // 引入dll工程中的头文件
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void toclick();
private:
    Message *msg;
    QPushButton *btn;
};
#endif // MAINWINDOW_H

 效果

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰消叶散

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值