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 文件放入程序编译后的文件夹中,才能正常运行程序。

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 }

 


					


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM