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. 【C++ 泛型编程01:模板】函数模板与类模板

    [模板] 除了OOP外,C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 函数模板 函数模板作用 建立一个通用函数,其函数返回值类型和形参类型可以 ...

  2. 鸣人的影分身(等级考试4级 2021-03 T3)

    题目: 此题题干又臭又长,直接看简化版. 鸣人的影分身(等级考试4级 2021-03 T3)等效于 把m个苹果分到n个盘子中,问有几种可能? dp[i][j]表示有i个盘子j个苹果时有多少种放法. 用 ...

  3. 力扣每日一题2023.1.19---2299. 强密码检验器 II

    如果一个密码满足以下所有条件,我们称它是一个 强 密码:    它有至少 8 个字符.    至少包含 一个小写英文 字母.    至少包含 一个大写英文 字母.    至少包含 一个数字 .    ...

  4. qt元对象系统之 Q_OBJECT宏

    宏展开是这样 #define Q_OBJECT \ public: \ QT_WARNING_PUSH \ Q_OBJECT_NO_OVERRIDE_WARNING \ static const QM ...

  5. AIR32F103(九) CAN总线的通信和ID过滤机制及实例

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  6. Python学习方向

    Python python学习方向 1.web开发 2.网络爬虫 3.人工智能 4.云计算 5.软件测试

  7. KingbaseES DBLink 介绍

    DBLink 扩展插件功能与 Kingbase_FDW 类似,用于远程访问KingbaseES 数据库.相比于Kingbase_FDW,DBLink 功能更强大,可以执行DML,还可以通过 begin ...

  8. pycharm 关闭符号自动补全

    insert pair bracket 是三种括号的自动补全 insert pair quote 是两种引号的自动补全

  9. observObservableCollection改变model属性UI不更新

    使模型类实现INotifyPropertyChanged即可 public class ResDepartmentData : INotifyPropertyChanged { //需要更新UI的属性 ...

  10. flexible.js源码分析

    (function flexible(window,document){ // 获取html的根元素 var docEl = document.documentElement; // dpr 物理像素 ...