Qt中如何建立一个对话框
#include "mainwindow.h"
#include <QDebug>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDialog> //模态,非模态对话框
#include <QMessageBox> //问题对话框
#include <QFileDialog> //文件路径对话框
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,400);
setWindowTitle("主窗口");
QMenuBar *mbar = menuBar();
QMenu *mnu = mbar->addMenu("文件");
//模态对话框
QAction *act = mnu->addAction("模态对话框");
connect(act, &QAction::triggered,
[=]()
{
QDialog dial ;
dial.resize(400,300);
dial.exec();
}
);
//非模态对话框
QAction *act2 = mnu->addAction("非模态对话框");
connect(act2, &QAction::triggered,
[=]()
{
QDialog *dial2 = new QDialog(this) ;
dial2->resize(400,300);
dial2->setAttribute(Qt::WA_DeleteOnClose); //释放动态空间
dial2->show();
}
);
//1)模态对话框特征:只能操作本对话框,不可以操作其他窗口
// 非模态对话框特征:可以操作本对话框,也可以操作其他窗口
//2) 注意:
//非模态对话框:需要定义成指针类型。
// 因为显示时非模态对话框用的是show,而不是exec,程序还没运行完就会结束,窗口会一闪而过
// 所以手动分类内存空间,手动释放
//关于对话框
QAction *act3 = mnu->addAction("关于对话框");
connect(act3, &QAction::triggered,
[=]()
{
QMessageBox::about(this,"标题","内容"); //建立关于对话框
}
);
//问题对话框
QAction *act4 = mnu->addAction("问题对话框");
connect(act4, &QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"文件名","路径"); //建立问题对话框
switch(ret) {
case QMessageBox::Yes: //Ok做出应答
qDebug()<<"Yes按下";
break;
case QMessageBox::No:
qDebug()<<"No按下";
break;
default:
break;
}
}
);
QAction *act5 = mnu->addAction("问题对话框2");
connect(act5, &QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"标题","内容",QMessageBox::Ok|QMessageBox::Cancel|QMessageBox::Help); //建立问题对话框
switch(ret) {
case QMessageBox::Ok: //Ok做出应答
qDebug()<<"Ok按下";
break;
case QMessageBox::Cancel:
qDebug()<<"Cancel按下"; //Cancel做出应答
break;
case QMessageBox::Help: //Help做出应答
qDebug()<<"Help按下";
break;
default:
break;
}
}
);
//问题对话框: 1)返回值是枚举类型,可以用switch_case语句
// 2)有两种定义形式,第二种形式可以无限添加
//文件路径对话框
QAction *act6 = mnu->addAction("文件路径对话框");
connect(act6, &QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(this,"标题","内容", //建立文件路径对话框
"souce (*.c *.h);; " //文件类型
"Images (*.png *.xpm *.jpg);;"
"Text files (*.txt);;"
"XML files (*.xml);;"
"all(*.*)");
qDebug()<<path;
}
);
//文件路径返回值是字符串类型,返回的是文件的路径
//文件类型一行写不下时,在";;"后敲回车,保留格式自动对齐
}
MainWindow::~MainWindow()
{
}