目录
1.模态对话框和非模态对话框区别
- 模态对话框:是指在操作当前对话框的时候,后面的对话框不能操作
- 非模态对话框:是指在操作当前对话框的时候,后面的对话框也可以操作
如果A在操作,B不能操作就是非模态对话框,反之就是模态对话框
2.模态对话框
再mainwindow.cpp中:
#include "mainwindow.h"
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QDialog>
#include<qDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *menu = mBar->addMenu(QStringLiteral("对话框"));
QAction *p1 = menu->addAction(QStringLiteral("模态对话框"));
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();//目的:程序执行到这儿就不会动了,得待人来操作
qDebug()<<"1111";
}
);
}
MainWindow::~MainWindow()
{
}
效果如下:
点击对话框会出现:
再点击模态对话框就会出现:
发现B可以点击,但是A不能
3.非模态对话窗
#include "mainwindow.h"
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QDialog>
#include<qDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *menu = mBar->addMenu(QStringLiteral("对话框"));
//模态对话框
QAction *p1 = menu->addAction(QStringLiteral("模态对话框"));
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();//目的:程序执行到这儿就不会动了,得待人来操作
qDebug()<<"1111";
}
);
//非模态对话框
QAction *p2 = menu->addAction(QStringLiteral("非模态对话框"));
connect(p2,&QAction::triggered,
[=]()
{
dlg.show();//dlg是一个成员属性不会释放也可以重新动态分配控件
qDebug()<<"1111";
}
);
}
MainWindow::~MainWindow()
{
}
点击非模态对话框
4.关于对话框
需要倒入的包
#include<QMessageBox>//生成关于对话框
//关于对话框
QAction *p3 = menu->addAction(QStringLiteral("关于对话框"));
connect(p3, &QAction::triggered,
[=]()
{
QMessageBox::about(this,"about",QStringLiteral("关于qt"));
}
);
效果:
点击关于对话框
5.问题对话框
倒入的头文件也是
#include<QMessageBox>//生成关于对话框
//问题对话框
QAction *p4 = menu->addAction(QStringLiteral("问题都对话框"));
connect(p4,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"question",QStringLiteral("准备好了吗?"));
switch(ret)
{
case QMessageBox::Yes:
qDebug()<<"i am ok";
break;
case QMessageBox::No:
qDebug()<<"i am bad";
break;
default:
break;
}
}
效果:
按问题对话框
当选择yes的时候会返回如下信息:
按No的时候会返回:
6.文件对话框
//文件对话框
QAction *p5 = menu->addAction(QStringLiteral("文件对话框"));
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,//指定父对象
"open",//标题
"../",//文件路径,上一级路径
"source(*.cpp *.h);;Test(*.txt);;all(*.*)"
);
qDebug()<<path;
}
);
效果
点击文件对话框进入文件选择
这里我们做了一个文件的筛选。
7.完整代码
mainwindow.cpp完整代码
#include "mainwindow.h"
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QDialog>
#include<QDebug>
#include<QMessageBox>//生成关于对话框
#include<QFileDialog>//文件对话框
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *menu = mBar->addMenu(QStringLiteral("对话框"));
//模态对话框
QAction *p1 = menu->addAction(QStringLiteral("模态对话框"));
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();//目的:程序执行到这儿就不会动了,得待人来操作
qDebug()<<"1111";
}
);
//非模态对话框
QAction *p2 = menu->addAction(QStringLiteral("非模态对话框"));
connect(p2,&QAction::triggered,
[=]()
{
dlg.show();//dlg是一个成员属性不会释放也可以重新动态分配控件
qDebug()<<"1111";
}
);
//关于对话框
QAction *p3 = menu->addAction(QStringLiteral("关于对话框"));
connect(p3, &QAction::triggered,
[=]()
{
QMessageBox::about(this,"about",QStringLiteral("关于qt"));
}
);
//问题对话框
QAction *p4 = menu->addAction(QStringLiteral("问题都对话框"));
connect(p4,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"question",QStringLiteral("准备好了吗?"));
switch(ret)
{
case QMessageBox::Yes:
qDebug()<<"i am ok";
break;
case QMessageBox::No:
qDebug()<<"i am bad";
break;
default:
break;
}
}
);
//文件对话框
QAction *p5 = menu->addAction(QStringLiteral("文件对话框"));
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,//指定父对象
"open",//标题
"../",//文件路径,上一级路径
"source(*.cpp *.h);;Test(*.txt);;all(*.*)"
);
qDebug()<<path;
}
);
}
MainWindow::~MainWindow()
{
}