Qt 将带界面的程序封装成dll

1.修改配置文件

1 #TEMPLATE = app
2 
3 DEFINES += CUSTOMMESSAGEBOX_LIBRARY
4 TEMPLATE = lib

2.在导出类的头文件上加如下代码

1 #if defined(CUSTOMMESSAGEBOX_LIBRARY)
2 #  define CUSTOMMESSAGEBOXSHARED_EXPORT Q_DECL_EXPORT
3 #else
4 #  define CUSTOMMESSAGEBOXSHARED_EXPORT Q_DECL_IMPORT
5 #endif

3.修改导出类定义

1 //class CustomMessageBox : public QDialog
2 class CUSTOMMESSAGEBOXSHARED_EXPORT CustomMessageBox : public QDialog

4.编译

若是 MinGW32 编译器,在编译之后会在文件夹下找到 ***.dll 和 ***.a 文件;若是 MSVC 编译器,则应该是 ***.dll 和 ***.lib。

5.使用

在使用该库的程序中,新建一个 include 文件夹,将 ***.a 文件 和 导出类的头文件 复制进这个文件夹,在程序中引入该头文件即可。在编译之后,将不同模式编译下的 dll 文件放入程序编译后的文件夹中,才能正常运行程序。

CSDN QT技术栈大纲:Qt开发必备技术栈学习路线和资料

6.简单案例

custommessagebox.pro

 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2020-03-07T22:37:05
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       += core gui
 8 
 9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10 
11 TARGET = custommessagebox
12 #TEMPLATE = app
13 
14 DEFINES += CUSTOMMESSAGEBOX_LIBRARY
15 TEMPLATE = lib
16 
17 # The following define makes your compiler emit warnings if you use
18 # any feature of Qt which as been marked as deprecated (the exact warnings
19 # depend on your compiler). Please consult the documentation of the
20 # deprecated API in order to know how to port your code away from it.
21 DEFINES += QT_DEPRECATED_WARNINGS
22 
23 # You can also make your code fail to compile if you use deprecated APIs.
24 # In order to do so, uncomment the following line.
25 # You can also select to disable deprecated APIs only up to a certain version of Qt.
26 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
27 
28 
29 SOURCES += \
30         custommessagebox.cpp \
31 #        main.cpp
32 
33 HEADERS += \
34         custommessagebox.h
35 
36 FORMS += \
37         custommessagebox.ui
38 
39 RESOURCES += \
40     resources.qrc

custommessagebox.h

 1 #ifndef CUSTOMMESSAGEBOX_H
 2 #define CUSTOMMESSAGEBOX_H
 3 
 4 #if defined(CUSTOMMESSAGEBOX_LIBRARY)
 5 #  define CUSTOMMESSAGEBOXSHARED_EXPORT Q_DECL_EXPORT
 6 #else
 7 #  define CUSTOMMESSAGEBOXSHARED_EXPORT Q_DECL_IMPORT
 8 #endif
 9 
10 #include <QDialog>
11 
12 namespace Ui {
13 class CustomMessageBox;
14 }
15 
16 //class CustomMessageBox : public QDialog
17 class CUSTOMMESSAGEBOXSHARED_EXPORT CustomMessageBox : public QDialog
18 {
19     Q_OBJECT
20 
21 public:
22     explicit CustomMessageBox(QWidget *parent = 0);
23     ~CustomMessageBox();
24 
25     void setMessage(const QString msg, int type);
26 
27     void test();
28 
29 private slots:
30     void on_btnOk_clicked();
31 
32 private:
33     Ui::CustomMessageBox *ui;
34 
35     void initStyle(); //初始化无边框窗体
36 
37     void moveFormToCenter(); //窗体居中显示
38 };
39 
40 #endif // CUSTOMMESSAGEBOX_H

custommessagebox.cpp

 1 #include "custommessagebox.h"
 2 #include "ui_custommessagebox.h"
 3 
 4 #include <QDesktopWidget>
 5 #include <QDebug>
 6 
 7 CustomMessageBox::CustomMessageBox(QWidget *parent) :
 8     QDialog(parent),
 9     ui(new Ui::CustomMessageBox)
10 {
11     ui->setupUi(this);
12     this->initStyle();
13     this->moveFormToCenter();
14 }
15 
16 CustomMessageBox::~CustomMessageBox()
17 {
18     delete ui;
19 }
20 
21 void CustomMessageBox::setMessage(const QString msg, int type)
22 {
23     switch (type) {
24         case 1:
25         {
26             ui->labIcoMain->setStyleSheet("border-image: url(:/images/image/msg_question.png);");
27             ui->lab_Title->setText("询问");
28             break;
29         }
30         case 2:
31         {
32             ui->labIcoMain->setStyleSheet("border-image: url(:/images/image/msg_error.png);");
33             ui->btnCancel->setVisible(false);
34             ui->lab_Title->setText("错误");
35             break;
36         }
37         default:
38         {
39             ui->labIcoMain->setStyleSheet("border-image: url(:/images/image/msg_info.png);");
40             ui->btnCancel->setVisible(false);
41             ui->lab_Title->setText("提示");
42             break;
43         }
44     }
45     ui->labInfo->setText(msg);
46     this->setWindowTitle(ui->lab_Title->text());
47 }
48 
49 void CustomMessageBox::test()
50 {
51     qDebug() << "测试是否可以输出";
52 }
53 
54 void CustomMessageBox::initStyle()
55 {
56     QFont localFont = this->font();
57     localFont.setPointSize(10);
58     localFont.setFamily("Microsoft YaHei");
59     this->setFont(localFont);
60     this->setWindowTitle(ui->lab_Title->text());
61     //设置窗体标题栏隐藏
62     this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
63     //设置图标
64     ui->lab_Ico->setStyleSheet("border-image: url(:/images/image/home.png);");
65     ui->btnMenu_Close->setIcon(this->style()->standardIcon(QStyle::SP_TitleBarCloseButton));
66     //关联关闭按钮
67     connect(ui->btnMenu_Close, SIGNAL(clicked()), this, SLOT(close()));
68     connect(ui->btnCancel, SIGNAL(clicked()), this, SLOT(close()));
69 }
70 
71 void CustomMessageBox::moveFormToCenter()
72 {
73     int width = this->width();
74     int height = this->height();
75     QDesktopWidget dwt;
76     int deskWidth = dwt.availableGeometry().width();
77     int deskHeight = dwt.availableGeometry().height();
78     QPoint movePoint(deskWidth / 2 - width / 2, deskHeight / 2 - height / 2);
79     this->move(movePoint);
80 }
81 
82 void CustomMessageBox::on_btnOk_clicked()
83 {
84     done(1);
85     this->close();
86 }

custommessagebox.ui

省略

调用

1 void Widget::on_btnMeesageBox_clicked()
2 {
3     CustomMessageBox messageBox;
4     messageBox.setMessage("调用成功", 1);
5     messageBox.exec();
6 }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值