二十一、自定义消息对话框
实现以下功能
首先创建一个QDialog工程
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<QLabel>
#include<QPushButton>
#include<QMessageBox>
#include<QGridLayout>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
QLabel *labelAge,*labelDownAge;
QPushButton *buttonAge;
QGridLayout *gl;
private slots:
void messageFunc();
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
resize(230,90);
labelAge=new QLabel("自定义消息框");
labelDownAge=new QLabel("未测试状态");
buttonAge=new QPushButton("测试");
gl=new QGridLayout(this);
gl->addWidget(labelAge,0,0);
gl->addWidget(buttonAge,0,1);
gl->addWidget(labelDownAge,1,0,1,1);
connect(buttonAge,&QPushButton::clicked,this,&Dialog::messageFunc);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::messageFunc()
{
QMessageBox message;
QPushButton *yes=message.addButton("YES",QMessageBox::ActionRole);
QPushButton *no=message.addButton("NO",QMessageBox::ActionRole);
message.setIconPixmap(QPixmap("E:/blog/source/img/huojian.png"));
message.exec();
if(message.clickedButton()==yes)
{
labelDownAge->setText("YES");
}
else if(message.clickedButton()==no)
{
labelDownAge->setText("NO");
}
}
比较简单
QAbstractButton *QMessageBox::clickedButton() const:
返回用户单击的按钮,如果用户按了Esc键并且没有设置转义按钮,则返回0。
如果exec()尚未被调用,则返回nullptr。