模态对话框 :QDialog
非模态对话框:QDialog
标准对话框(关于对话框、问题对话框等):QMessageBox
文件对话框:QFileDialog
标准对话框还有
- QColorDialog: 选择颜色;
- QFileDialog: 选择文件或者目录;
- QFontDialog: 选择字体;
- QInputDialog: 允许用户输入一个值,并将其值返回;
- QMessageBox: 模态对话框,用于显示信息、询问问题等;
- QPageSetupDialog: 为打印机提供纸张相关的选项;
- QPrintDialog: 打印机配置;
- QPrintPreviewDialog:打印预览;
- QProgressDialog: 显示操作过程。
#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 * dialog = mBar->addMenu("对话框");
QAction * motai = dialog->addAction("模态对话框");
connect(motai,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();
}
);
QAction * feimotai = dialog->addAction("非模态对话框");
connect(feimotai,&QAction::triggered,
[=]()
{
//这样,闪退,因为内存被释放掉了。
//QDialog dlg;
//dlg.show();
//第一种情况,设为类的私有变量
//dlg.show();
//qDebug()<<"非模态对话框";
//问题,为什么子窗口不关闭
//第二种情况,动态分配其内存,但是不好,因为会出现内存消耗太多
//QDialog * dlg = new QDialog(this);
//dlg->show();
//第三种情况,动态分配,关闭时释放内存
QDialog * dlg = new QDialog;
dlg->setAttribute(Qt::WA_DeleteOnClose);//关闭时释放内存
dlg->show();
}
);
QAction * p1 = dialog->addAction("关于对话框");
connect(p1,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"关于qt","qt是一个很好的软件");
}
);
QAction * p2 = dialog->addAction("问题对话框");
connect(p2,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"problem","Are you ok?");
switch(ret)
{
case QMessageBox::Yes:
qDebug()<<"I am OK";
break;
case QMessageBox::No:
qDebug()<<"I am Bad";
break;
default:
break;
}
}
);
connect(p2,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"problem","Are you ok?",
QMessageBox::Ok|QMessageBox::No|QMessageBox::Cancel);
switch(ret)
{
case QMessageBox::Ok:
qDebug()<<"I am OK";
break;
case QMessageBox::No:
qDebug()<<"I am Bad";
break;
case QMessageBox::Cancel:
qDebug()<<"cancel";
break;
default:
break;
}
}
);
//文件对话框
QAction * p3 = dialog->addAction("文件对话框");
connect(p3,&QAction::triggered,
[=]()
{
QString file_path = QFileDialog::getOpenFileName(this,"openfile","../",
"Source(*.cpp *.h);;Text files (*.txt);;all(*.*)");
qDebug()<<file_path;
}
);
//关闭释放内存
this->setAttribute(Qt::WA_DeleteOnClose);
}
MainWindow::~MainWindow()
{
}