5.6 自定义(Custom)消息框
当以上所有消息框都不能满足开发的需求时,Qt还允许Custom(自定义)消息框。包括消息框的图标、按钮、内容等都可根据需要进行设定。下面介绍一下自定义(Custom)消息框的具体创建方法:
(1) 添加该工程的提供主要显示标准消息对话框界面的函数所在的文件,在“DialogExample”项目名上单击鼠标右键,在弹出的快捷菜单中选择“Add New...”菜单项,在弹出的对话框中选择“C++ Class”选项。单击“OK”按钮,弹出“C++ Class Wizard”对话框,在Base class后面的下拉列表框中输入基类名“QDialog”,在Class name后面的文本框中输入类的名称“CustomDlg”。
(2) 单击“Next”按钮,单击“Finish”按钮,在该工程中就添加了customdlg.h头文件和customdlg.cpp源文件。
(3) 打开“msgboxdlg.h”头文件,自动生成的代码如下:
#include <QDialog> class CustomDlg : public QDialog { public: CustomDlg(); };
(4) 打开“msgboxdlg.cpp”文件,自动生成的代码如下:
#include "customdlg.h" CustomDlg::CustomDlg() { }
下面是完成主对话框的操作过程:
(1) 在dialog.h中添加private成员变量:
QPushButton *CustomBtn; QLabel *label;
(2) 添加private slots槽函数:
void showCustomDlg();
(3) 在dialog.cpp中的构造函数中添加如下代码:
CustomBtn =new QPushButton; CustomBtn->setText(tr("用户自定义消息对话框实例")); label =new QLabel; label->setFrameStyle(QFrame::Panel|QFrame::Sunken);
以及添加布局管理:
mainLayout->addWidget(CustomBtn,4,0); mainLayout->addWidget(label,4,1);
在Dialog构造函数的最后添加事件关联代码:
connect(CustomBtn,SIGNAL(clicked()),this,SLOT(showCustomDlg()));
其中,dialog.cpp文件中的槽函数showCustomDlg()实现的具体代码如下:
void Dialog::showCustomDlg() { label->setText(tr("Custom Message Box")); QMessageBox customMsgBox; customMsgBox.setWindowTitle(tr("用户自定义消息框")); //设置消息框的标题 QPushButton *yesBtn=customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole); QPushButton *noBtn=customMsgBox.addButton(tr("No"),QMessageBox::ActionRole); QPushButton *cancelBtn=customMsgBox.addButton(QMessageBox::Cancel); customMsgBox.setText(tr("这是一个用户自定义消息框!")); customMsgBox.setIconPixmap(QPixmap("CustomTest.png")); customMsgBox.exec(); if(customMsgBox.clickedButton()==yesBtn) label->setText("Custom Message Box/Yes"); if(customMsgBox.clickedButton()==noBtn) label->setText("Custom Message Box/No"); if(customMsgBox.clickedButton()==cancelBtn) label->setText("Custom Message Box/Cancel"); return; }
在开始部分加上头文件:
#include <QMessageBox>
其中:
● QPushButton *yesBtn=customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole):定义消息框所需的按钮,由于QMessageBox::standardButtons只提供了常用的一些按钮,并不能满足所有应用的需求,因此QMessageBox类提供了一个addButton()函数来为消息框增加自定义的按钮,addButton()函数的第1个参数为按钮显示的文字,第2个参数为按钮类型的描述。
● QPushButton *cancelBtn=customMsgBox.addButton(QMessageBox::Cancel):为addButton()函数加入一个标准按钮。消息框将会按调用addButton()函数的先后次序在消息框中由左至右依次插入按钮。
● customMsgBox.setText(tr("这是一个用户自定义消息框!")):设置自定义消息框中显示的提示信息内容。
● customMsgBox.setIconPixmap(QPixmap("CustomTest.png")):设置自定义消息框的图标。
● customMsgBox.exec():显示此自定义消息框。
(4) 运行该程序后,单击“用户自定义消息框”按钮后显示效果如图5.7所示。