引用自:通俗讲解模态弹框和非模态弹框
弹框是一种重要的交互方式,主要用于完成信息传递和用户反馈两大功能。弹框很常见,但并不见的每一个设计师都可以100%的弄明白弹框这个概念。这篇文章是对弹框体系的一个简单梳理和总结,希望可以解决大家心中的一些疑惑。
模态弹框
模态弹框和非模态弹框最大的区别就是是否强制用户交互。模态弹框会打断用户的当前操作流程,用户不在弹框上操作的话,其余功能都使用不了。从这方面,我们可以看出来模态弹框的优缺点都十分的明显:优点是可以很好的获取的用户的视觉焦点,缺点是打断了用户的当前操作流程。模态弹框属于一种重量性反馈,一般用于用户进行重要的操作。常见的模态弹框种类有对话框(Dialog/Alter),动作栏(Actionbar/Actionsheet/ActionView)和浮层(Popover/Popup)。
非模态弹框
与模态弹框相比,非模态弹框最大的区别是不强制用户交互,也不会弹出半透明背景层,非模态弹框停留一段时间后会自己消失。所以相对于模态弹框来说,非模态弹框属于轻量型反馈,不会对用户造成太大的干扰。常见的非模态弹框有toast(hud)和snackbar。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QMessageBox>
#include <QDebug>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建 创建对话框
connect(ui->actionNew,&QAction::triggered,this,[=](){
//对话框分类 模态对话框 非模态对话框
//模态对话框 不可以对其他窗口进行操作
//非模态对话框 可以对其他窗口进行操作
//模态对话框创建
// QDialog dlg(this);
// dlg.resize(120,30);
// dlg.exec();
//非模态对话框创建
// QDialog *dlg2 = new QDialog(this);
// dlg2->resize(120,30);
// dlg2->show();
// //设置 55号属性
// dlg2->setAttribute(Qt::WA_DeleteOnClose);
//QMessageBox对话框
//错误提示对话框
//QMessageBox::critical(this,"错误","critical");
//信息提示对话框
//QMessageBox::information(this,"信息","info");
//询问提示对话框
// 参数1 父窗口 参数2 标题 参数3 提示信息 参数4 按键类型 参数5 默认关联回车按键
// if( QMessageBox::Save == QMessageBox::question(this,"询问","question" , QMessageBox::Save | QMessageBox::Cancel ,QMessageBox::Cancel))
// {
// qDebug()<<"点击的是保存";
// }
// else
// {
// qDebug()<<"点击的是取消";
// }
//警告提示对话框
//QMessageBox::warning(this,"警告","warning");
//颜色对话框
// QColor color = QColorDialog::getColor(Qt::red);
// qDebug() << color.red() << color.green() << color.blue() ;
//文件对话框
// QString fileName = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\zhangtao\\Desktop","(*.doc)");
// qDebug () <<fileName;
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug() << "字体" << font.family().toUtf8().data() << "字号"<< font.pointSize()
<< "是否加粗"<<font.bold() << "是否倾斜" << font.italic();
});
}
MainWindow::~MainWindow()
{
delete ui;
}
具体的还可以看看这篇文章《QDialog 简介》。