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. 行为型模式 - 备忘录模式Memento

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 在备忘录模式(Memento Pattern)下,为的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该 ...

  2. 前端基础知识-js(一)个人学习记录

    待补充: https://www.ruanyifeng.com/blog/javascript/ 运行验证: https://www.jsrun.net/new 以下仅为个人理解,如有误请指正,非常感 ...

  3. Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理

    Django框架之drf 一.断点调式使用 ​ 指,在我们编写代码的时候,程序运行出现报错是无可避免的,当程序 出现报错时,我们需要找到出现报错的代码进行修改,如果时简短的代码很容易就可以找到报错位置 ...

  4. 多线程之Semaphore登录限流示例

    public static void main(String[] args) { //允许最大的登录数 int slots=10; ExecutorService executorService = ...

  5. mysql-01数据库基本简介

    1.数据库的概念 DB:数据库(database):存储数据的"仓库".它保存了一系列有组织的数据. DBMS:数据库管理系统(Database Management System ...

  6. 2.2.vue用法在uniapp中的使用_

    开发的H5页面可以用div,但是适应小程序的用法,得参考uniapp的组件章节,用view包裹.

  7. P20_事件绑定

    事件绑定 什么是事件 事件是渲染层到逻辑层的通讯方式.通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理. 小程序中常用的事件 事件对象的属性列表 当事件回调触发的时候,会收到一个事件对 ...

  8. STM32F4跳转函数

    JMP2APP void JMP2APP(void) { pFunction Jump_To_Application; uint32_t JumpAddress; if (((*(__IO uint3 ...

  9. C语言小程序-天天酷跑类游戏 26号完成

    1.创建游戏内背景 2.实现人物 奔跑 跳跃 优化帧 3.障碍物 出现 https://kxd.lanzoul.com/iKXU20elmtah 开源地址 半成品

  10. 上篇 | 使用 🤗 Transformers 进行概率时间序列预测

    介绍 时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新.ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下. 概率预测 通常,经 ...