当前位置: 首页 > news >正文

模态与非模态的对话框

本文学习自:

《Qt Creato快速入门》

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

1.

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.show();
}Widget::~Widget()
{delete ui;
}

这样写dialog会一闪而逝的。

因为dialog的生命周期很短,构造函数完成后,它就析构了。

2.

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog *dialog = new QDialog(this);dialog->resize(550,550);dialog->setStyleSheet("background-color:green;");dialog->show();
}

写成这样的话,会显示dialog,但不是模态的。

什么是模态对话框:

在关闭它之前,不能再与同一个应用程序的其他窗口进行交互。

3.

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.exec();
}Widget::~Widget()
{delete ui;
}

写成这样的话,dialog是模态的。

而且,因为使用了exec()方法,当dialog关闭后,程序才继续向下执行。

exec():当对话框关闭时,函数返回值,程序向下进行。

show():调用完函数后,立即将控制权交给调用者,程序继续向下进行。

4.使用show()也可以建立模态对话框,需要在前面使用setModel()函数。

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.setModal(true);dialog.show();
}Widget::~Widget()
{delete ui;
}

这样写的话,dialog是模态窗口,但还是一闪而逝。

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog *dialog = new QDialog(this);dialog->resize(550,550);dialog->setModal(true);dialog->setStyleSheet("background-color:green;");dialog->show();
}Widget::~Widget()
{delete ui;
}

这样写的话,dialog是模态窗口,先显示dialog,关闭后,才显示widget。

5.

setWindowModel:

参数:设置模态对话框要阻塞的窗口类型

Qt::NonModel:不阻塞任何窗口

Qt::WindowModel:阻塞它的父窗口和所有祖先窗口和它们的子窗口

Qt::ApplicationModel(阻塞整个应用程序的所有窗口)

默认是Qt::ApplicationModel

---

学海无涯,加油! 

http://www.lryc.cn/news/460490.html

相关文章:

  • C语言练习
  • CyberRt实践之Hello Apollo(Apollo 9.0版本)
  • 【JavaScript】LeetCode:61-65
  • 【SpringAI】(一)从实际场景入门大模型——适合Java宝宝的大模型应用开发
  • 植物大战僵尸杂交版
  • live2d 实时虚拟数字人形象页面显示,对接大模型
  • SpringCloud-持久层框架MyBatis Plus的使用与原理详解
  • Servlet的HttpServletRequest
  • U9销售订单不能带出最新价格出来
  • Jmeter接口测试企业级项目实战day1
  • 接口测试面试题含答案
  • 横板营业执照提取生成
  • webm格式怎么转换成mp4?这5种转换方法很好用
  • C/C++语言基础--C++异常看这一篇就够了
  • DFT ATPG中常见影响coverage的因素有哪些?
  • Python机器学习数据清洗到特征工程策略
  • 多线程-进阶(2)CountDownLatchConcurrentHashMapSemaphore
  • 密码管理器KeePass的安装及使用
  • 星海智算:【萤火遛AI-Stable-Diffusion】无需部署一键启动
  • JS生成器的特殊用法:委托yield*
  • 【CuPy报错】NVRTC_ERROR_COMPILATION (6)找不到 ‘vector_types.h‘
  • 机器学习:知识蒸馏(Knowledge Distillation,KD)
  • 【C++入门篇 - 3】:从C到C++第二篇
  • YOLOv8模型改进 第七讲 一种新颖的注意力机制 Outlook Attention
  • C#多线程基本使用和探讨
  • PHP DateTime基础用法
  • 一次Fegin CPU占用过高导致的事故
  • 【Go初阶】两万字快速入门Go语言
  • 【React】使用 react hooks 需要遵守的原则
  • Python编程:创意爱心表白代码集