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. 你想成为.Net 7的技术高手吗?来这里看看

    前言: 你是否时常觉得,整天搞些Curd和增删改查.这些毫无意义的东西,完全是浪费生命.想要进阶,成为高手.却苦于找不到方法,没有一套系统性的东西. 有鉴于此,新建了一个群,方便大家一起交流和分享一些 ...

  2. Backbone前端框架解读

    作者: 京东零售 陈震 一. 什么是Backbone 在前端的发展道路中,前端框架元老之一jQuery对繁琐的DOM操作进行了封装,提供了链式调用.各类选择器,屏蔽了不同浏览器写法的差异性,但是前端开 ...

  3. 记录一次排查log4cxx库按照日期回滚,不创建新目录的BUG

    目录 1.背景 2.排查步骤 2.1.错误代码定位 2.2.问题猜测 2.3.错误代码分析 2.4.错误原因 3.解决方法 1.背景 C++ 项目,使用了 log4cxx 日志库,版本为:0.10.0 ...

  4. drf-day8——断点调试、认证.权限.频率的源码分析、基于APIView编写分页、全局异常处理

    目录 一.断点调试使用 二.认证,权限,频率源码分析(了解) 2.1 权限类的执行源码 2.2 认证源码分析 2.3 频率源码分析 2.4 自定义频率类(了解) 2.5 SimpleRateThrot ...

  5. wsl 更新到D盘

    更换教程 https://blog.csdn.net/qq_39683682/article/details/113801632 安装后需要换个默认用户 https://blog.csdn.net/q ...

  6. redis georadius源码分析与性能优化

    原文地址: https://blog.fanscore.cn/a/51/ 背景 最近接到一个需求,开发中使用了redis georadius命令取附近给定距离内的点.完工后对服务进行压测后发现geor ...

  7. .net gRPC初探 - 从一个简单的Demo中了解并学习gRPC

    一..NET 上的 gRPC 的简介 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协 ...

  8. 【译】.NET 7 中的性能改进(三)

    原文 | Stephen Toub 翻译 | 郑子铭 PGO 我在我的 .NET 6 性能改进一文中写了关于配置文件引导优化 (profile-guided optimization) (PGO) 的 ...

  9. VUE项目Webpack3升级为webpack4总结

    前言: 2018年8月25号webpack4正式发布,webpack4引入了零配置的概念(实际配置下来还是要写不少配置),官方宣传能够提升构建速度 webpack3转webpack4官方说明: htt ...

  10. gin 01

    1.gin介绍: 2.gin的安装 go get -u github.com/gin-gonic/gin 3.gin的第一个helloWord package main import ( " ...