Qt中自定义提示框messageBox

本文介绍了Qt中QMessageBox的基本使用,包括各种类型的提示框,并探讨了自定义提示框的原因,如样式单一、尺寸不合适等。通过展示自定义提示框的代码结构和按钮触发槽函数,解释了如何创建和响应用户操作。最后,提供了实用例程,为后续的Qt圆弧型提示框制作奠定基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt中QMessageBox消息对话框的使用

Qt中自带的对话框QMessageBox

加入头文件#include

函数名原型:static StandardButton QMessageBox::information ( QWidget * parent, const QString & title, constQString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

#有以下提示框类型:
Qmessagebox::question()
Qmessagebox::information()
Qmessagebox::warning()

#实例使用如下:
//获取返回的按钮内容
StandardButton::QMessageBox btn= QMessageBox::information(NULL, “Title”, “Content”, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if(btn==QMQMessageBox::YES)
{
//执行代码内容
}
else
{
//执行代码内容
}
效果如下:
在这里插入图片描述

自定义提示框

为什么需要设计自定义提示框呢?
一是:Qt自带的提示框样式单一;
二是:提示框的太小;
三是:跟项目的不搭配;

代码如下:
messageBox.h

class messageBox:public QDialog
{
    Q_OBJECT
public:
    messageBox(QString title = "提示",QString text = nullptr, int showMessageType = Warning, int showBtnType = ButtonYes, QDialog *parent = nullptr);//构造函数
    ~messageBox();
    enum Icon {//图标
        // keep this in sync with QMessageDialogOptions::Icon
        Information = 1,
        Warning = 2,
        Critical = 3,
        Question = 4
    };
	//按钮选择
    enum Button{
        ButtonYes = 0,	//一个yes
        ButtonNo,		//一个no
        ButtonYesAndNo,	//有两个按钮,一个yes,一个no
        ButtonNot,		//没有按钮
    };
private:
    QString m_title;		//标题栏
    QString m_showText;		//内容
    int m_showMessageType;	//显示类型
    int m_showBtnType;		//按钮显示类型

    QLabel *titleLabel;
    QLabel *showLabel;
    QLabel *iconLabel;
    QPushButton *okBtn;
    QPushButton *quitBtn;
   // QIcon *icon;
    QHBoxLayout *titlelayout;
    QHBoxLayout *layout;
    QHBoxLayout *layout1;
    QVBoxLayout *vLayout;
    void btnStyle();
    void messageStyle();
private slots:
    void btnClick();

};

messageBox.cpp

messageBox::messageBox(QString title, QString text,int showMessageType,int showBtnType,QDialog *parent)
    : QDialog(parent),
      m_title(title),
      m_showText(text),
      m_showMessageType(showMessageType),
      m_showBtnType(showBtnType)

{
    btnStyle();
    messageStyle();
    vLayout = new QVBoxLayout;
    vLayout->addLayout(titlelayout);
    vLayout->addLayout(layout);
    vLayout->addLayout(layout1);
    vLayout->setSpacing(0);
    vLayout->setMargin(0);
    vLayout->setStretch(0,1);
    vLayout->setStretch(1,2);
    vLayout->setStretch(2,1);
    this->resize(360,200);
    this->setLayout(vLayout);
    this->show();
    connect(okBtn,SIGNAL(clicked()),this,SLOT(btnClick()));
    connect(quitBtn,SIGNAL(clicked()),this,SLOT(btnClick()));

}

按钮触发槽函数
void messageBox::btnClick()
{
QPushButton * btn = (QPushButton*)sender();
if (btn == okBtn) {
this->accept(); //返回1
} else if (btn == quitBtn) {
this->reject(); //返回0
}
}

提示框的布局

void messageBox::btnStyle()
{
    titlelayout = new QHBoxLayout;
    titleLabel = new QLabel(m_title);
    titleLabel->setAlignment(Qt::AlignCenter);
    titleLabel->setStyleSheet("background: rgbda(85,174,255,100%);color:#ffffff;");
    titlelayout->addWidget(titleLabel);
    
    okBtn = new QPushButton;
    quitBtn = new QPushButton;
    okBtn->setText(tr("确定"));
    okBtn->setFixedSize(120,50);
    okBtn->setFocusPolicy(Qt::NoFocus);
    okBtn->setStyleSheet("border-image:url(:/image/partdialog/未选中.png);color: #ffffff;");
    quitBtn->setText(tr("取消"));
    quitBtn->setFixedSize(120,50);
    quitBtn->setFocusPolicy(Qt::NoFocus);
    quitBtn->setStyleSheet("border-image:url(:/image/partdialog/未选中.png);color: #ffffff;");
    
    layout1 = new QHBoxLayout;
    if (m_showBtnType == ButtonYes) {
        layout1->addWidget(okBtn);
        layout1->setSpacing(30);
        layout1->setMargin(15);
    } else if (m_showBtnType == ButtonNo) {
        layout1->addWidget(quitBtn);
        layout1->setSpacing(30);
        layout1->setMargin(15);
    } else if (m_showBtnType == ButtonYesAndNo) {
        layout1->addWidget(okBtn);
        layout1->addWidget(quitBtn);
        layout1->setSpacing(30);
        layout1->setMargin(15);
    } else {

    }
}

结论:其实提示框的重点是套用Dialog,然后和按钮的触发机制,accept()和reject()的返回值,在主线程调用的时候if (msg.exec())判断

实用例程

下一章节:Qt 制作圆弧型提示框QDialog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赟赟、嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值