Qt自己也有很多的消息框,这时,如果这些消息框都不能满足开发的需求, Qt还允许自定义消息框。
包括消息框的图标, 按钮和消息框显示的内容都可以根据需求设定。不废话了,下面给出个简单的例子~~~
custmsg_widget.h
#ifndef CUSTMSGWIDGET_H
#define CUSTMSGWIDGET_H
#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QTextCodec> //---用于解决QT5下中文乱
#include <QMessageBox>
#include <QGridLayout>
#include <QPixmap>
#include <QFrame>
class CusMsgWidget : public QDialog
{
Q_OBJECT
public :
explicit CusMsgWidget(QWidget *parent = 0);
public slots:
void slotShowCustomDlg();
private:
QPushButton *CustomBtn;
QLabel *label;
QGridLayout *mainLayout; //---网格布局
};
#endif //CUSTMSGWIDGET_H
custmsg_widget.cpp
#include "custmsg_widget.h"
CusMsgWidget::CusMsgWidget(QWidget *parent /*= 0*/):QDialog(parent)
{
//---窗口大小
resize(200, 100);
//-----------------------解决中文乱码
QTextCodec *codec = QTextCodec::codecForName("GB18030");
//----按钮 与 label 控件
CustomBtn = new QPushButton(this);
CustomBtn->setText(codec->toUnicode("点击我试试"));
label = new QLabel(this);
label->setFrameStyle(QFrame :: Panel | QFrame :: Sunken);
//-----控件布局
mainLayout = new QGridLayout(this);
mainLayout->addWidget(CustomBtn, 0, 0);
mainLayout->addWidget(label, 1, 0);
//---设置事件关联代码
connect(CustomBtn, SIGNAL(clicked()), this, SLOT(slotShowCustomDlg()));
}
//------------槽函数
void CusMsgWidget::slotShowCustomDlg()
{
//-----------------------解决中文乱码
QTextCodec *codec = QTextCodec::codecForName("GB18030");
//--- label 显示内容
QString labelStr = codec->toUnicode("自定义消息框");
label->setText(labelStr);
label->setText(codec->toUnicode("自定义消息框"));
//-QMessageBox 设置标题
QMessageBox customMsg;
customMsg.setWindowTitle(codec->toUnicode("自定义消息框"));
//----设定3个常规按钮
QPushButton *yesBtn = customMsg.addButton(codec->toUnicode("是"), QMessageBox::ActionRole);
QPushButton *noBtn = customMsg.addButton(codec->toUnicode("否"), QMessageBox::ActionRole);
QPushButton *cancelBtn = customMsg.addButton(QMessageBox::Cancel);
//---
customMsg.setText(codec->toUnicode("这是一个用户自定义的消息框"));
customMsg.setIconPixmap(QPixmap(":/1"));
customMsg.exec();
//-----点击消息框按钮事件处理
//--是
if (customMsg.clickedButton() == yesBtn)
{
label->setText(codec->toUnicode("点击了自定义消息框的“是”按钮"));
}
//---否
if (customMsg.clickedButton() == noBtn)
{
label->setText(codec->toUnicode("点击了自定义消息框的“否”按钮"));
}
//---取消
if (customMsg.clickedButton() == cancelBtn)
{
label->setText(codec->toUnicode("点击了自定义消息框的“取消”按钮"));
}
return;
}