QT--弹出新的对话框 show()/exec()的区别
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()的区别的更多相关文章
- Qt弹出消息对话框
添加头文件 #include <QMessageBox> if(ui->lineEditXStart->text().isEmpty()) //判断lineedit输入内容是否 ...
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- jQuery Dialog弹出层对话框插件
Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...
- jQuery UI弹出新窗体
借助jqueryUI 的Dialog 在隐藏的div中嵌入Iframe 改变iframe的路径 如果项目经常用到弹出新窗体,则利用模板,把此代码和html 放入父页面中,实现父级调用, <in ...
- Winforn中使用FastReport实现点击导出按钮PDF预览并弹出另存为对话框
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- JS实现弹出层对话框
点击按钮后,弹出层对话框,可交互,点击关闭后才关闭掉对话框. 效果图: 源码: <!doctype html> <html> <head> <meta cha ...
- ASP.NET点击按钮弹出确认对话框方法
开发asp.net网页应用程序的时候,有些页面的按钮需要增加一个确认对话框,比如: 实现这个功能比较简单,代码这样写: Button.Attributes["onclick"] = ...
- 弹出消息对话框ScriptManager
//直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...
- Windows服务弹出MessageBox对话框
Windows服务弹出MessageBox对话框 自从Windows升级到Vista版本后,系统服务就不在允许弹出那些惨绝人寰的MessageBox了(至于为什么不让弹出,原理有点小复杂,我也不是很门 ...
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
2013-9-15 1. CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...
随机推荐
- Entry键值对对象-Map集合遍历键值对方式
Entry键值对对象 我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在[Map中是-对应关系,这一对对象又称做Map 中的一个 Entry(项).Ent ...
- JDK的下载与安装-环境变量的配置
JDK的下载与安装 环境变量的配置 配置环境变量作用 开发Java程序,需要使用JDK中提供的工具,工具在JDK9安装目录的 bin 目录下. 在DOS命令行下使用这些工具,就要先进入到JDK的bin ...
- 方法的调用-JDK的JShell简单使用
方法的调用 方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法.在 主方法中,直接写要调用的方法名字就可以调用了. public static ...
- Linux 安装 WIFI驱动 rtl8188gu
https://www.wyr.me/post/623 https://www.leonlu.cc/hobby/note006-rtl8188gu-linux/ 亲测:debian11,manjaro ...
- vue3 ts遇到的问题
main.ts中的 createApp(App),只作用于一个,如果,有两个,则并不是一个对象,另一个会不生效
- @EnableDiscoveryClient和@EnableEurekaClient springboot3.x
@EnableDiscoveryClient和@EnableEurekaClient 将一个微服务注册到Eureka Server(或其他服务发现组件,例如Zookeeper.Consul等)的步骤 ...
- 工具-使用org.openjdk.jol查看对象在内存中的布局
1 添加依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core& ...
- 举例说明postman接口测试
接口测试的本质就是接口的数据和数据库里的数据作对比 接口测试,可以理解为测的是后端的程序,而系统测试的时候,测试的是前端的程序,前端只有在满足条件的时候才会调到接口,所以接口测试可以测得更全面更准确 ...
- 视觉十四讲:第七讲_ORB特征点
1.特征点 特征点是图像里一些特别的地方,如角点.边缘和区块.比较著名有SIFT.SURF.ORB等.SIFT充分考虑了图像变换过程中出现的光照.尺度.旋转等变换,但是计算量非常大.而ORB是质量和性 ...
- 一个诡异的 Pulsar InterruptedException 异常
背景 今天收到业务团队反馈线上有个应用往 Pulsar 中发送消息失败了,经过日志查看得知是发送消息时候抛出了 java.lang.InterruptedException 异常. 和业务沟通后得知是 ...