Qt 自定义QMessageBox

自定义QMessageBox

参考Qt自带的 QMessageBox源码,通过继承QDialog纯代码实现。代码结构清晰,原理简单,不再进行太多理论讲解。
注意:代码中类名MessageBox 可能和 windows环境的定义重复,虽然直接复制可用,但最好自己修改其它类名,或者添加命名空间

效果图

直接上效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

直接上代码

messagebox.h 头文件

#ifndef MESSAGEBOX_H
#define MESSAGEBOX_H

#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include <QString>

enum MsgBoxType
{
    MsgBoxType_Warn = 0,
    MsgBoxType_Info = 1,
    MsgBoxType_Error = 2
};

// 类名MessageBox  可能和 windows环境的定义重复 最好自己修改其它类名
class MessageBox : public QDialog
{
    Q_OBJECT
public:
    explicit MessageBox(QWidget *parent, MsgBoxType type, QString text);

    void initState();

    void initWarn(const QString &text);
    void initError(const QString &text);
    void initInfo(const QString &text);

signals:

public slots:
    void dealbtnSureClicked();
    void dealbtnCancelClicked();

private:
    QLabel *labPic;
    QLabel *labNote;
    QPushButton *btnSure;
    QPushButton *btnCancle;
};

#endif // MESSAGEBOX_H

messagebox.cpp 实现文件

#include "messagebox.h"

MessageBox::MessageBox(QWidget *parent, MsgBoxType type, QString text) : QDialog(parent)
{
    initState();

    if(type == MsgBoxType_Info)
    {
        initInfo(text);
    }
    else if(type == MsgBoxType_Warn)
    {
        initWarn(text);
    }
    else
    {
        initError(text);
    }

}

void MessageBox::initState()
{
    this->resize(240,160);
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);

    this->setStyleSheet("background-color:rgb(46,47,48)");

    labPic = new QLabel(this);
    labNote = new QLabel(this);
    btnSure = new QPushButton("确认",this);
    btnCancle = new QPushButton("取消",this);

    connect(btnSure,&QPushButton::clicked,this,&MessageBox::dealbtnSureClicked);
    connect(btnCancle,&QPushButton::clicked,this,&MessageBox::dealbtnCancelClicked);
}

void MessageBox::initWarn(const QString &text)
{
    int width = this->width();

    labPic->setStyleSheet("image:url(:/image/msg_question.png)");
    labPic->setGeometry(width*0.5-20,10,40,40);

    labNote->setStyleSheet("color:white");
    labNote->setAlignment(Qt::AlignCenter);
    labNote->setGeometry(0,70,width,20);
    labNote->setText(text);

    btnSure->setGeometry(width*0.2-15,110,80,30);
    btnSure->setStyleSheet("QPushButton{color:white; border-radius: 5px; background-color:rgb(43,34,45)}"
                           "QPushButton:hover{background-color:blue}"
                           "QPushButton:pressed{background-color:blue}");

    btnCancle->setGeometry(width*0.6,110,80,30);
    btnCancle->setStyleSheet("QPushButton{color:white; border-radius: 5px; background-color:rgb(43,34,45)}"
                             "QPushButton:hover{background-color:blue}"
                             "QPushButton:pressed{background-color:blue}");

}

void MessageBox::initError(const QString &text)
{
    int width = this->width();

    labPic->setStyleSheet("image:url(:/image/msg_error.png)");
    labPic->setGeometry(width*0.5-20,10,40,40);

    labNote->setStyleSheet("color:white");
    labNote->setAlignment(Qt::AlignCenter);
    labNote->setGeometry(0,70,width,20);
    labNote->setText(text);

    btnSure->setGeometry(width*0.5-40,110,80,30);
    btnSure->setStyleSheet("QPushButton{color:white; border-radius: 5px; background-color:rgb(43,34,45)}"
                           "QPushButton:hover{background-color:blue}"
                           "QPushButton:pressed{background-color:blue}");

    btnCancle->hide();
}

void MessageBox::initInfo(const QString &text)
{
    int width = this->width();

    labPic->setStyleSheet("image:url(:/image/msg_info.png)");
    labPic->setGeometry(width*0.5-20,10,40,40);

    labNote->setStyleSheet("color:white");
    labNote->setAlignment(Qt::AlignCenter);
    labNote->setGeometry(0,70,width,20);
    labNote->setText(text);

    btnSure->setGeometry(width*0.5-40,110,80,30);
    btnSure->setStyleSheet("QPushButton{color:white; border-radius: 5px; background-color:rgb(43,34,45)}"
                           "QPushButton:hover{background-color:blue}"
                           "QPushButton:pressed{background-color:blue}");

    btnCancle->hide();
}

void MessageBox::dealbtnSureClicked()
{
    this->accept();
}

void MessageBox::dealbtnCancelClicked()
{
    this->reject();
}

函数调用

    MessageBox msgBox(this, MsgBoxType_Warn, "警告信息");

    int res = msgBox.exec();

    if(res == QDialog::Accepted)
    {
        qDebug() << "Accepted";
    }
    else if(res == QDialog::Rejected)
    {
        qDebug() << "Rejected";
    }
    else
    {
        qDebug() << "error";
    }

总结

实现思路,其实就是创建一个继承QDialog的widget而已,QDialog使其有自带messageBox的属性,widget布局自己发挥。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt是一个跨平台的C++应用程序框架,它包含了大量的可重用的组件、类和工具,以快速且有效地开发多种类型的应用程序。而QMessageBox是其中一个常用的对话框组件。Qt提供丰富的API方法定义QMessageBox的各种特性和使用方法。 QMessageBox可以帮助开发者对各种情况下弹出对话框进行日常处理,如错误、警告和提示。但是,对于一些特定的场景,自定义QMessageBox将会增加程序的美观度和交互效果。 自定义QMessageBox可以通过继承QDialog和添加各种控件(如QLabel、QLineEdit和QPushButton)来实现。也可以通过在应用程序中重新定义QMessageBox类的静态函数来创建自定义QMessageBox。使用自定义QMessageBox可以方便地控制对话框中的界面布局和显示的内容。 自定义QMessageBox的核心就是继承QDialog,并提供设置和获取各种选项的接口函数。在需要弹出对话框的地方,实例化该自定义类并调用show()方法即可。而且自定义QMessageBox可以配合QStyleSheet美化工具来设置样式。 总之,自定义QMessageBox可以大大提高开发者的应用开发效率和程序的美观度。它不仅可以帮助开发者创建更加高效且友好的对话框,还可以让用户在使用过程中更加舒适便捷。 ### 回答2: Qt是一种流行的跨平台C ++应用程序框架。Qt框架带有许多GUI控件,如按钮、列表框和消息框等。QMessageBoxQt框架中的一种标准对话框,可用于显示消息、信息、警告和错误等。除此之外,开发人员可以根据自己的需要定义自己的QMessageBox。 自定义QMessageBox可以有效地提高应用程序的用户体验。开发人员可以创建自己的对话框窗口,根据应用程序的特定需求来修改其外观、功能和行为。例如,您可以设置自己的图标、标题、按钮、文本内容等。您还可以定义槽函数和信号,以响应用户操作,并处理错误和异常情况。 要创建自定义QMessageBox,首先需要继承QMessageBox类。然后,您可以使用setWindowTitle()方法来定义自己的标题,使用setText()方法来设置细节文本,使用setIcon()方法来定义定义图标。此外,您还可以使用addAction()方法添加自定义的操作,如“确定”、“取消”等。 自定义QMessageBoxQt框架中的一个实用功能,开发人员可以使用它来创建自己的高质量应用程序。它可以使应用程序更加灵活、高效和易于使用,满足用户的不同需求和需求。 ### 回答3: 在Qt中,我们可以自定义QMessageBox以满足我们自己的需求。通过继承QMessageBox类和对其进行重载和修改,可以实现自定义弹出对话框。 首先,我们需要创建一个新的类作为自定义消息框的子类,并继承QMessageBox类。然后我们可以根据具体的需求去重载以下函数: 1. 构造函数:可以在构造函数中设置消息框的图标、消息、按钮等属性。 2. showEvent()函数:在showEvent()函数中,我们可以进行子控件的创建工作,并进行子控件的布局,包括文本框、按钮等,实现自定义消息框的样式。 3. paintEvent()函数:在paintEvent()函数中,我们可以设置背景色和边框等样式属性。 4. buttonClicked()函数:在buttonClicked()函数中,可以获得用户点击的按钮,根据不同的按钮执行不同的操作。 自定义QMessageBox类可以通过类似于原始QMessageBox的方式调用,如:CustomMessageBox *msg_box = new CustomMessageBox();msg_box->setText("Hello World!");msg_box->exec(); 通过这样的方式,即可展现自己定制的消息框。在Qt中,通过自定义QMessageBox可以方便地满足我们对特定弹出框的需求,使我们的程序更加优美和易用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zhou_Xintong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值