show()显示非模态对话框,exec()显示模态对话框。

非模态对话框不会阻塞程序的线程,因此

  如果你的对话框时创建在栈上,跳出作用域之后,对象便销毁了,对话框会一闪而过;

  如果使用new在堆上创建对话框,跳出作用域之后对象不能被销毁,但是建立在堆上需要考虑释放内存的问题;

非模态对话框不会阻塞线程,可能用户还没来得及输入数据,就已经执行之后的代码。

模态对话框开启一个事件循环,会阻塞程序的线程,函数返回之后,直接获取对话框的数据。

新建一个项目,主界面如下:

非模态窗口打开代码如下:

 1 #ifndef NEWMODALDIALOG_H
2 #define NEWMODALDIALOG_H
3
4 #include <QDialog>
5
6 namespace Ui {
7 class newModalDialog;
8 }
9
10 class newModalDialog : public QDialog
11 {
12 Q_OBJECT
13
14 public:
15 explicit newModalDialog(QWidget *parent = 0);
16 ~newModalDialog();
17
18 signals:
19 void receiveData(QString s);
20 private:
21 Ui::newModalDialog *ui;
22 void accept();
23 };
24
25 #endif // NEWMODALDIALOG_H

非模态窗口h文件

 1 #include "newmodaldialog.h"
2 #include "ui_newmodaldialog.h"
3
4 newModalDialog::newModalDialog(QWidget *parent) :
5 QDialog(parent),
6 ui(new Ui::newModalDialog)
7 {
8 ui->setupUi(this);
9 }
10
11 newModalDialog::~newModalDialog()
12 {
13 delete ui;
14 }
15
16 void newModalDialog::accept()
17 {
18 QString data = ui->lineEdit_showText->text();
19 emit receiveData(data); //emit发送信号
20 QDialog::accept();
21 }

非模态窗口cpp文件

 1 void MainWindow::on_pushButton_modelessDlg_clicked()
2 {
3 newModalDialog *newDlg = new newModalDialog();
4 connect(newDlg,&newModalDialog::receiveData,this,&MainWindow::displayData);
5 newDlg->show();
6
7 }
8
9 void MainWindow::displayData(const QString& data)
10 {
11 ui->label_getInput->setText(data);
12 }

主界面主要代码

模态窗口打开主要代码如下:

 1 #ifndef NEWDIALOG_H
2 #define NEWDIALOG_H
3
4 ///模态对话框
5
6 #include <QDialog>
7
8 namespace Ui {
9 class newDialog;
10 }
11
12 class newDialog : public QDialog
13 {
14 Q_OBJECT
15
16 public:
17 explicit newDialog(QWidget *parent = 0);
18 ~newDialog();
19
20 QString getinput(); //获取输入的数据
21 private:
22 Ui::newDialog *ui;
23 };
24
25 #endif // NEWDIALOG_H

模态对话框窗口h文件

 1 #include "newdialog.h"
2 #include "ui_newdialog.h"
3
4 newDialog::newDialog(QWidget *parent) :
5 QDialog(parent),
6 ui(new Ui::newDialog)
7 {
8 ui->setupUi(this);
9 }
10
11 newDialog::~newDialog()
12 {
13 delete ui;
14 }
15
16 QString newDialog::getinput()
17 {
18 return ui->lineEdit_input->text();
19 }

模态对话框窗口cpp文件

1 void MainWindow::on_pushButton_showNewDialog_clicked()
2 {
3 newDialog newDlg;
4 newDlg.exec();
5 ui->label_getInput->setText(newDlg.getinput());
6 }

主界面主要代码

参考:https://blog.csdn.net/knightaoko/article/details/53825314

QT--弹出新的对话框 show()/exec()的区别的更多相关文章

  1. Qt弹出消息对话框

    添加头文件 #include <QMessageBox> if(ui->lineEditXStart->text().isEmpty()) //判断lineedit输入内容是否 ...

  2. QT笔记之模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  3. jQuery Dialog弹出层对话框插件

    Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...

  4. jQuery UI弹出新窗体

    借助jqueryUI 的Dialog 在隐藏的div中嵌入Iframe  改变iframe的路径 如果项目经常用到弹出新窗体,则利用模板,把此代码和html 放入父页面中,实现父级调用, <in ...

  5. Winforn中使用FastReport实现点击导出按钮PDF预览并弹出另存为对话框

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. JS实现弹出层对话框

    点击按钮后,弹出层对话框,可交互,点击关闭后才关闭掉对话框. 效果图: 源码: <!doctype html> <html> <head> <meta cha ...

  7. ASP.NET点击按钮弹出确认对话框方法

    开发asp.net网页应用程序的时候,有些页面的按钮需要增加一个确认对话框,比如: 实现这个功能比较简单,代码这样写: Button.Attributes["onclick"] = ...

  8. 弹出消息对话框ScriptManager

    //直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...

  9. Windows服务弹出MessageBox对话框

    Windows服务弹出MessageBox对话框 自从Windows升级到Vista版本后,系统服务就不在允许弹出那些惨绝人寰的MessageBox了(至于为什么不让弹出,原理有点小复杂,我也不是很门 ...

  10. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

随机推荐

  1. Java 进阶P-4.4+P-4.5

    子类和父类的关系 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有 ...

  2. CSAPP 配套实验 DataLab

    第一次写博客,当作随笔留给自己看吧,如果能帮到读者,是我的荣幸. 这是 CSAPP 的配套实验 DataLab,概括的来说就是在较严格的限制条件下把 15 个函数补充完整. 本人能力没有那么强,很多题 ...

  3. 【Oculus Interaction SDK】(一)设置 VR 相机与控制器 && 实现简单的抓取功能

    前言 前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了.本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发.当然,不排除我文章刚写完 SDK 又变 ...

  4. 关于C#中async/await的用法

    一直对c#中async/await的用法模模糊糊,不太清晰,今天写了一下Demo彻底明确一下async/await的用法,以免因为对其不了解而对后期的业务产生影响(比如事务导致的锁表等等). 1. 首 ...

  5. Django中需要修改配置

    Django需要修改配置 1.修改templates中的路径配置: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.Django ...

  6. CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

    一.前言 大家在自己电脑来进行服务器的一些操作时,基本都是使用CentOS 7或者是CentOS 8,但是2021年底CentOS 8宣布停止了维护:CentOS 7 在2024年6月30日也会停止维 ...

  7. .net core 前端传递参数有值 后端接收到的数据却是null

    1.问题分析 在做接口测试时,偶然出现了前端输出有值,但是后端断点调试时却出现接收参数总是为null的情况 2.解决办法 前端打印log,看前端的每一个传值的数据类型,与后端请求参数类进行认真的一一比 ...

  8. react中Hooks的理解和用法

    一.Hooks是什么? Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是 ...

  9. C4模型,架构设计图的脚手架,你值得拥有

    hi,我是熵减,见字如面. 对于软件开发团队来说,写软件设计文档,花架构图,是日常工作中的关键一项. 而其中,如何画好系统设计的架构图呢? Simon Brown 就 提出 C4 模型,来解决这个问题 ...

  10. Prometheus&Alertmanager告警推送

    前言 尽管可以通过可视化数据监控系统运行状态,但我们无法时刻关注系统运行,因此需要一些实时运行的工具能够辅助监控系统运行,当系统出现运行问题时,能够通知我们,以此确保系统稳定性,告警便是作为度量指标监 ...