qt 关闭对话框 提醒_深入理解Qt中各种消息框对话框的使用

本文介绍了在Qt框架中如何使用QMessageBox进行消息交互,包括Question、Information、Warning、Critical等七种类型的消息框,并提供了自定义消息框的示例,帮助开发者更好地理解和应用Qt中的对话框。
摘要由CSDN通过智能技术生成

最近在学习Qt框架,今天学习了一下消息框的使用, 现整理出来以作记录。

在程序运行时,经常需要提示用户一些信息,比如警告啊,提示啊,建议啊之类的东西。这些东西基本上是通过消息框与用户进行交互的,Qt中主要是用QMessageBox类来加以实现的。

消息框一般分为七种:

Question询问消息框:为正常的操作提供一个简单的询问

Information信息消息框:为正常操作提供一个提示

Warning提示消息框:提醒用户发生了一个错误

Critical警告消息框:警告用户发生了一个严重错误

About关于消息框:自定义的关于信息

AboutQt关于Qt消息框:Qt自身的关于信息

Custom自定义消息框:自己定制消息框

具体用法见源码以及分析:

Dialog.pro

#-------------------------------------------------

#

# Project created by QtCreator 2015-10-24T17:32:35

#

#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Dialog

TEMPLATE = app

SOURCES += main.cpp

dialog.cpp

HEADERS += dialog.h

dialog.h

#ifndefDIALOG_H

#defineDIALOG_H

#include

#include

#include

#include

#include

class Dialog: public QDialog

{

Q_OBJECT

public:

Dialog(QWidget *parent = 0);

~Dialog();

public://配置部件和布局

QLabel *label;

QPushButton *QuestionBtn,*InformationBtn,*WarningBtn,*CriticalBtn,*AboutBtn,*AboutQtBtn,*CustomBtn;

QGridLayout *layout,*layoutLabel,*layoutBtn;

protected slots://各种按钮的槽

void slotQuestion();

void slotInformation();

void slotWarning();

void slotCritical();

void slotAbout();

void slotAboutQt();

void slotCustom();

};

#endif// DIALOG_H

dialog.cpp

#include"dialog.h"

Dialog::Dialog(QWidget *parent)

: QDialog(parent)

{

setWindowTitle("QMessageBox");

QuestionBtn=new QPushButton("Question");

InformationBtn=new QPushButton("Information");

WarningBtn=new QPushButton("Warning");

CriticalBtn=new QPushButton("Critical");

AboutBtn=new QPushButton("About");

AboutQtBtn=new QPushButton("AboutQt");

CustomBtn=new QPushButton("Custom");

label=new QLabel("About Qt MessageBox:");

layout=new QGridLayout(this);

layoutLabel=new QGridLayout;

layoutBtn=new QGridLayout;

layoutLabel->addWidget(label,0,0);

layoutBtn->addWidget(QuestionBtn,1,0);

layoutBtn->addWidget(InformationBtn,1,1);

layoutBtn->addWidget(WarningBtn,2,0);

layoutBtn->addWidget(CriticalBtn,2,1);

layoutBtn->addWidget(AboutBtn,3,0);

layoutBtn->addWidget(AboutQtBtn,3,1);

layoutBtn->addWidget(CustomBtn,4,0);

layoutBtn->setSpacing(15);

//嵌套布局

layout->addLayout(layoutLabel,0,0);

layout->addLayout(layoutBtn,1,0);

setFixedSize(300,220);//固定大小

connect(QuestionBtn,SIGNAL(clicked()),this,SLOT(slotQuestion()));

connect(InformationBtn,SIGNAL(clicked()),this,SLOT(slotInformation()));

connect(WarningBtn,SIGNAL(clicked()),this,SLOT(slotWarning()));

connect(CriticalBtn,SIGNAL(clicked()),this,SLOT(slotCritical()));

connect(AboutBtn,SIGNAL(clicked()),this,SLOT(slotAbout()));

connect(AboutQtBtn,SIGNAL(clicked()),this,SLOT(slotAboutQt()));

connect(CustomBtn,SIGNAL(clicked()),this,SLOT(slotCustom()));

}

Dialog::~Dialog()

{

}

//直接调用AboutQt,设置句柄和标题即可

void Dialog::slotAboutQt(){

QMessageBox::aboutQt(this,"This is the title");

}

//以下三个函数均是设置句柄标题和信息即可,也可以在最后设置默认按钮,一般默认的是QMessageBox::Ok。

void Dialog::slotAbout(){

QMessageBox::about(this,"About","This is the label.");

}

void Dialog::slotCritical(){

QMessageBox::critical(this,"Critical","This is the label.");

}

void Dialog::slotInformation(){

QMessageBox::information(this,"Information","This is the label.");

}

//自定义消息框

void Dialog::slotCustom(){

QMessageBox customMsgBox;

customMsgBox.setWindowTitle("Custom message box");

//添加按键

QPushButton *lockBtn=customMsgBox.addButton("Lock",QMessageBox::ActionRole);

QPushButton *unlockBtn=customMsgBox.addButton("Unlock",QMessageBox::ActionRole);

QPushButton *cancelBtn=customMsgBox.addButton(QMessageBox::Cancel);//注意cancel不能指定Text

//customMsgBox.setIconPixmap(QPixmap("a.png"));//设置图片

customMsgBox.setText("This is the label");

customMsgBox.exec();//执行消息框

QPushButton *msg=(QPushButton*)customMsgBox.clickedButton();//接受按键信息

//判断按键

if(msg==lockBtn)

label->setText("Custom button /lock");

if(msg==unlockBtn)

label->setText("Custom button /unlock");

if(msg==cancelBtn)

label->setText("Custom button /cancel");

}

void Dialog::slotQuestion(){

//QMessageBox::**question()**函数,传入句柄,标题,文本,按钮值,返回按键对应的值,最后也可以加默认按键的位置

int msg=QMessageBox::question(this,"Question","This is the label.",QMessageBox::Ok|QMessageBox::Cancel);

//判断选择信息

switch(msg){

case QMessageBox::Ok:

label->setText("Question button /OK");

break;

case QMessageBox::Cancel:

label->setText("Question button /Cancel");

break;

default:

break;

}

}

void Dialog::slotWarning(){

//QmessageBox::warning()函数同Question函数

int msg=QMessageBox::warning(this,"Question","This is the label.",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save);

switch(msg){//判断选择信息

case QMessageBox::Save:

label->setText("Warning button /Save");

break;

case QMessageBox::Cancel:

label->setText("Warning button /Cancel");

break;

case QMessageBox::Discard:

label->setText("Warning button /Discard");

break;

default:

break;

}

}

##main.cpp

#include"dialog.h"

#include

int main(intargc,char*argv[])

{

QApplicationa(argc, argv);

Dialog w;

w.show();

return a.exec();

}

运行截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值