对话框
模态对话框 需先解决完模态对话框,才能回到原窗口
非模态对话框 表现上与原窗口独立
模态对话框有:
提示对话框 只有一个按钮,常用于 关于对话框
问题对话框 俩个按钮,常用于选择yes or no
文件对话框 打开文件,用于选择什么文件
mainwindow.cpp
#include "mainwindow.h"
#include<QMenuBar>
#include<QMenu>
#include<QAction>
#include<QDialog>
#include<QString>
#include<QtDebug>
#include<QMessageBox>
#include<QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar =menuBar();
setMenuBar(mBar);
QMenu *menu =mBar->addMenu("对话框");
QAction *p1 =menu ->addAction("模态对话框");
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();
qDebug() <<"1111";
}
);
QAction *p2 =menu ->addAction("非模态对话框");
connect(p2,&QAction::triggered,
[=]()
{
// QDialog dlg;
// dlg.show();
// qDebug() <<"2222";
// QDialog *p = new QDialog(this);
// p->show(); 会导致内存泄漏
QDialog *p = new QDialog;
p->setAttribute(Qt::WA_DeleteOnClose);
p->show();
}
);
QAction *p3 =menu ->addAction("关于对话框");// 一个按钮的
connect(p3,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"about","关于qt");
}
);
QAction *p4 =menu ->addAction("问题对话框");//
connect(p4,&QAction::triggered,
[=]()
{
int ret = QMessageBox::question(this,"question"
,"Are you ok?",
QMessageBox::Yes|QMessageBox::Cancel);
switch (ret)
{
case QMessageBox::Yes:qDebug()<<"i am ok";break;
case QMessageBox::Cancel:qDebug()<<"i am bed";break;
default: break;
}
}
);
QAction *p5 =menu ->addAction("文件对话框");//
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,
"open",
"../",
"souce(*.cpp*.h);;"
"Text(*.txt);;"
"all(*.*)"
);
qDebug()<<path;
}
);
}
MainWindow::~MainWindow()
{
}