【Qt教程】1.10 - Qt5模态与非模态对话框( QDialog)

1. 对话框简介

对话框简介:通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。

对话框分为模态对话框和非模态对话框:

  • 模态对话框,会阻塞同一应用程序中其他窗口的输入。
  • 非模态对话框,可以在显示的同时,也能对其他窗口进行操作。

 

2. 模态对话框、非模态对话框 区别

示例:

1)新建工程:使用QMainWindow类。

 

2)源码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QDialog dlg;
};
#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(480, 320);
    setWindowTitle("Hello");

    // 新建菜单栏
    QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    // 添加菜单
    QMenu *menu = mBar->addMenu("对话框");

    // 添加菜单项,添加信号槽弹出 模态对话框
    QAction *p1 = menu->addAction("模态对话框");
    connect( p1, &QAction::triggered,
             [=]()
            {
                dlg.setWindowTitle("模态对话框");
                dlg.exec();
                qDebug() << "111";
            });

    // 添加菜单项,添加信号槽弹出 非模态对话框
    QAction *p2 = menu->addAction("非模态对话框");
    connect( p2, &QAction::triggered,
             [=]()
            {
                // 可以用全作用域的写法,也可用堆区创建,加上生命范围
                //dlg.show();
                //qDebug() << "111";

                QDialog *p = new QDialog;
                p->setAttribute(Qt::WA_DeleteOnClose);// 应用控件时自动释放
                p->setWindowTitle("非模态对话框");
                p->show();
                qDebug() << "111";
            });

}

MainWindow::~MainWindow()
{
}

setAttribute(Qt::WA_DeleteOnClose);// 对话框关闭时,堆区自动释放。

 

3)现象

  • 打开模态对话框时,不会输出111,关闭对话框时候才会输出111.
  • 打开非模态对话框时,会直接输出111.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值