一、模态对话框于非模态对话框的概念:
**模态对话框:**在最上层对话框前,不能操作后面的对话框
**非模态对话框:**在最上层对话框前,能操作后面的对话框
在上节课基础上,在菜单栏中创建一个模态对话框和一个非模态对话框
新建文件:
添加菜单:
QMenu menu=mBar->addMenu(“1”);
添加模态对话框:
QAction p1=menu->addAction(“模态对话框”);
打印结果:
connect(p1,&QAction::triggered,
=
{
QDialog dlg;//直接定义dlg成员
dlg.exec();//执行到这等着用户操作,用户操作完才往下执行
qDebug()<<“1111”;
});
添加非模态对话框:
QAction p2=menu->addAction(“非模态对话框”);
打印:
connect(p2,&QAction::triggered,
=
{//dlg成员在类中定义
dlg.show();//执行到这等着用户操作,用户操作完才往下执行
qDebug()<<“1111”;
});
在类中定义局部变量:
运行结果:
模态:
非模态:
**关于对话框:**这是Qt中的关于对话框,特点就是对话框中有一个按钮
下面来实现这样的关于对话框
在菜单下添加一个关于的按钮:
QAction p3=menu->addAction(“about”);
实现按钮中的关于对话框:
connect(p3,&QAction::triggered,
=
{
QMessageBox::about(this,“about”,“writing a QT”);
});
运行结果:Ok是类中保护的
**问题对话框:**在框中有多个按钮给你选择,例如下面这个就是一个问题对话框。
实现问题对话框:
菜单栏下创建一个问题菜单:
QAction p4=menu->addAction(“question”);
生成问题对话框:
connect(p4,&QAction::triggered,
=
{
int ret=QMessageBox::question(this,“question”,“Are You Ok?”,QMessageBox::Ok |QMessageBox::Cancel);
switch(ret)
{
case QMessageBox::Ok:
qDebug()<<“I am OK”;
break;
case QMessageBox::Cancel:
qDebug()<<“I am bad”;
break;
default:
break;
}
});
**代码解释:**Ok和Cancel是自定义的,所有下面的选择也要对应,也可以使用QMessageBox这个类中现有的成员
运行结果:
文件路径查找:
一般我们在运行项目都可以通过编译器找到文件的路径,比如Eclipse,VS这样的编译器都可以,下面我们就来实现这样的功能:
菜单栏下创建一个路径菜单:
QAction p5=menu->addAction(“路径”);
实现路径查找:
connect(p5,&QAction::triggered,
=
{
QString path=QFileDialog::getOpenFileName(this,“open”,"…/",
"souce(.cpp .h);;Text(.txt);;all(.)"
);
qDebug()<
代码解释:
open是对话框名字,
…/是文件上一层路径(Linux),
souce(
#-------------------------------------------------
#
# Project created by QtCreator 2019-12-24T18:06:45
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = motai
TEMPLATE = app
SOURCES += main.cpp \
MainWindow.cpp
HEADERS += \
MainWindow.h
CONFIG +=C++11
头文件MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
QDialog dlg;
};
#endif // MAINWINDOW_H
main.cpp
#include "MainWindow.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
MainWindow.cpp
#include "MainWindow.h"
#include
#include
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar=menuBar();
// mBar->resize(400,50);
setMenuBar(mBar);
//添加菜单
QMenu *menu=mBar->addMenu("1");
QAction *p1=menu->addAction("模态对话框");
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();//执行到这等着用户操作,用户操作完才往下执行
qDebug()<<"1111";
});
QAction *p2=menu->addAction("非模态对话框");
connect(p2,&QAction::triggered,
[=]()
{
dlg.show();//执行到这等着用户操作,用户操作完才往下执行
qDebug()<<"1111";
});
QAction *p3=menu->addAction("about");
connect(p3,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"about","writing a QT");
});
QAction *p4=menu->addAction("question");
connect(p4,&QAction::triggered,
[=]()
{
int ret=QMessageBox::question(this,"question","Are You Ok?",QMessageBox::Ok |QMessageBox::Cancel);
switch(ret)
{
case QMessageBox::Ok:
qDebug()<<"I am OK";
break;
case QMessageBox::Cancel:
qDebug()<<"I am bad";
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()
{
}