QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示

一、模态对话框于非模态对话框的概念:
**模态对话框:**在最上层对话框前,不能操作后面的对话框
**非模态对话框:**在最上层对话框前,能操作后面的对话框

在上节课基础上,在菜单栏中创建一个模态对话框和一个非模态对话框
新建文件:

添加菜单:
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:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第1张图片
运行结果:
模态:QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第2张图片
非模态:QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第3张图片
**关于对话框:**这是Qt中的关于对话框,特点就是对话框中有一个按钮
QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第4张图片
下面来实现这样的关于对话框
在菜单下添加一个关于的按钮:
QAction p3=menu->addAction(“about”);
实现按钮中的关于对话框:
connect(p3,&QAction::triggered,
=
{
QMessageBox::about(this,“about”,“writing a QT”);
});
运行结果:Ok是类中保护的
QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第5张图片
**问题对话框:**在框中有多个按钮给你选择,例如下面这个就是一个问题对话框。
QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第6张图片
实现问题对话框:
菜单栏下创建一个问题菜单:
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这个类中现有的成员
运行结果:
QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第7张图片
文件路径查找:
一般我们在运行项目都可以通过编译器找到文件的路径,比如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(.cpp .h);;Text(.txt);;all(.)是文件可选择的类型

运行结果:
QT:模态和非模态对话框,关于对话框,问题对话框,文件路径显示_第8张图片
所有代码:
项目文件motai.pro

#-------------------------------------------------
#
# 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()
{

}

你可能感兴趣的:(qt)