最近在学习Qt框架,今天学习了一下消息框的使用, 现整理出来以作记录。
在程序运行时,经常需要提示用户一些信息,比如警告啊,提示啊,建议啊之类的东西。这些东西基本上是通过消息框与用户进行交互的,Qt中主要是用QMessageBox类来加以实现的。
消息框一般分为七种:
- Question询问消息框:为正常的操作提供一个简单的询问
- Information信息消息框:为正常操作提供一个提示
- Warning提示消息框:提醒用户发生了一个错误
- Critical警告消息框:警告用户发生了一个严重错误
- About关于消息框:自定义的关于信息
- AboutQt关于Qt消息框:Qt自身的关于信息
- Custom自定义消息框:自己定制消息框
具体用法见源码以及分析:
Dialog.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#-------------------------------------------------
#
# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#ifndefDIALOG_H
#defineDIALOG_H
#include<QDialog>
#include<QGridLayout>
#include<QPushButton>
#include<QLabel>
#include<QMessageBox>
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#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
1
2
3
4
5
6
7
8
9
10
11
|
#include"dialog.h"
#include<QApplication>
int main(intargc, char *argv[])
{
QApplicationa(argc, argv);
Dialog w;
w.show();
return a.exec();
}
|
运行截图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.mythsman.com/2015/10/27/1/?utm_source=tuicool&utm_medium=referral