一、QMessageBox 消息对话框(掌握)
QMessageBox继承自QDialog,是一个Qt内置的用来展示信息或询问用户一个问题的模态对话框。
预设了四种类型:
像那些已经写好的窗口,这些现成的东西都会有一些特性,就是他们的对象都不需要new或者说他们就不需要拿到对象,他们为了方便我们使用会用一个静态成员函数就可以把弹窗显示出来。上面的四种类型想要显示就需要用对应的静态成员函数
四种弹窗的参数和返回值基本一致:
参数1:父窗口
参数2:标题文字
参数3:展示信息内容
返回值:用户点击的按钮,默认情况下只有question类型的弹窗有必要接收返回值
只要是预设的对话框他们想要拿数据他一定是通过返回值拿数据 静态成员函数的返回值
不是Q开头的大概路是枚举
我们这个对话框只有只有yes和no所以只有要判断返回值是yes还是no可以判断用户点击的是什么
示例代码下载链接:百度网盘 请输入提取码
提取码:hqyj
--来自百度网盘超级会员V6的分享
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
group = new QButtonGroup(this);
group->addButton(ui->btnInfomation,1);
group->addButton(ui->btnWarning,2);
group->addButton(ui->btnCritical,3);
group->addButton(ui->btnQuestion,4);
group->addButton(ui->btnCustom,5);
connect(group,SIGNAL(buttonClicked(int)),
this,SLOT(btnsClickedSlot(int)));
}
Dialog::~Dialog()
{
delete group;
delete ui;
}
void Dialog::custom()
{
// 创建自定义的QMessageBox对象
QMessageBox* box = new QMessageBox(this);
// 设置标题
box->setWindowTitle("自定义QMessageBox");
// 准备一个图片对象
QPixmap pic(":/new/prefix1/new_year.png");
// 设置图标
box->setIconPixmap(pic);
// 设置消息内容
box->setText("2023年即将到来,你感到快乐吗?");
// 创建两个按钮对象
QPushButton* btn1 = new QPushButton("快乐",box);
QPushButton* btn2 = new QPushButton("不快乐",box);
// 添加按钮到弹窗的正确位置
box->addButton(btn1,QMessageBox::YesRole);
box->addButton(btn2,QMessageBox::NoRole);
// 展示弹窗
box->show();
}
void Dialog::btnsClickedSlot(int id)
{
if(id == 1)
QMessageBox::information(this,"information","网络已连接!");
else if(id == 2)
QMessageBox::warning(this,"warning","网络波动!");
else if(id == 3)
QMessageBox::critical(this,"critical","无法检测到网络!");
else if(id == 4)
{
QMessageBox::StandardButton result = QMessageBox::question(this,"question","您是否没插网线?");
if(result == QMessageBox::Yes)
qDebug() << "我是无线我插什么网线?";
else if(result == QMessageBox::No)
qDebug() << "有线性能一定比无线好。";
}
else if(id == 5)
custom();
}
二、常见的窗口类(掌握)
本次Qt学习到的窗口类之间的继承关系如下图所示。
- QObject
所有Qt类的基类,本身并不是窗口类。
- QWidget
如果创建时制定parent参数的值,此时QWidget对象会作为制定参数对应的窗口内部的组件;如果创建时不传入parent参数的值,此时QWidget对象会作为一个独立的窗口。
- QMainWindow
通常使用此类作为应用程序的主窗口,主窗口包含菜单栏、工具栏、中心组件与状态栏。因为使用相对复杂,所以一直讲课未用。
- QDialog
通常作为子窗口存在的对话框窗口,特点是组成简单。比较简单的程序可以使用此类型作为主窗口。
- QMessageBox
QDialog的一个派生类,主要用于消息展示和提问。
- QFileDialog
QDialog一个派生类,主要用于浏览本地磁盘的文件并选择。
所有的窗口类共有一些属性和函数,例如:
- windowTitle : QString
所有窗口的标题,可以通过getter和setter进行读写。
void QWidget::setWindowState(Qt::WindowStates windowState)
设置窗口状态,参数值如下:
- windowFlags : Qt::WindowFlags
窗口标记,支持同时通过setter设定多个标记,多个标记之间使用|分割
常用的标记有: