对话框的数据传递
来源:互联网 发布:win10 加密软件哪款好 编辑:程序博客网 时间:2024/05/27 09:47
模态对话框使用了exec()
函数将其显示出来。exec()
函数的真正含义是开启一个新的事件循环(我们会在后面的章节中详细介绍有关事件的概念)。所谓事件循环,可以理解成一个无限循环。Qt 在开启了事件循环之后,系统发出的各种事件才能够被程序监听到。这个事件循环相当于一种轮询的作用。既然是无限循环,当然在开启了事件循环的地方,代码就会被阻塞,后面的语句也就不会被执行到。因此,对于使用了exec()
显示的模态对话框,我们可以在exec()
函数之后直接从对话框的对象获取到数据值。
void QTTest::Open()
{
QDialog dialog(this);
dialog.setWindowTitle(tr("Hello, dialog!"));
dialog.exec();
qDebug() << dialog.result();
QMessageBox::information(this, tr("Information"), tr("Open"));
}
需要注意的一点是,如果我们设置 dialog 的属性为WA_DeleteOnClose
,那么当对话框关闭时,对象被销毁,我们就不能使用这种办法获取数据了。在这种情况下,我们可以考虑使用 parent 指针的方式构建对话框,避免设置WA_DeleteOnClose
属性;或者是利用另外的方式。
实际上,QDialog::exec()
是有返回值的,其返回值是QDialog::Accepted
或者QDialog::Rejected
。
模态对话框相对简单,如果是非模态对话框,QDialog::show()
函数会立即返回,如果我们也这么写,就不可能取得用户输入的数据。因为show()
函数不会阻塞主线程,show()
立即返回,用户还没有来得及输入,就要执行后面的代码,当然是不会有正确结果的。那么我们就应该换一种思路获取数据,那就是使用信号槽机制。
由于非模态对话框在关闭时可以调用QDialog::accept()
或者QDialog::reject()
或者更通用的QDialog::done()
函数,所以我们可以在这里发出信号。另外,如果找不到合适的信号发出点,我们可以重写QDialog::closeEvent()
函数,在这里发出信号。
另外不要担心如果对话框关闭,是不是还能获取到数据。因为 Qt 信号槽的机制保证,在槽函数在调用的时候,我们始终可以使用sender()
函数获取到 signal 的发出者。关于sender()
函数,可以在文档中找到更多的介绍。顺便说一句,sender()
函数的存在使我们可以利用这个函数,来实现一个只能打开一个的非模态对话框(方法就是在对话框打开时在一个对话框映射表中记录下标记,在对话框关闭时利用sender()
函数判断是不是该对话框,然后从映射表中将其删除)。
- 对话框的数据传递
- 6.对话框之间的数据传递
- 关于多对话框数据的传递问题
- 第七节 对话框之间的数据传递
- MFC不同对话框之间的数据传递
- |对话框与对话框数据传递|
- QT 对话框数据传递
- QT 对话框数据传递
- 对话框数据传递
- 对话框之间传递数据
- MFC对话框之间传递数据
- WM_COPYDATA两个对话框之间传递数据的乱码问题
- MFC程序中不同的对话框类传递数据
- 怎样在MFC的两个对话框中相互传递数据
- 向对话框传递数据DialogBoxParam;获取对话框返回的数据DialogBox;EndDialog;强制转换;
- MFC-对话框间的互相调用及数据传递(模态对话框)
- 用SetWindowLong在对话框之间传递数据
- 两个对话框中间如何传递数据
- PhpStorm和WAMP配置调试参数
- Win10虚拟机ping本地ip
- 思维导图之React学习
- 断路器hystrix原理及使用
- Swift: 把 Struct 作为数据模型的注意事项
- 对话框的数据传递
- springMVC的自定义类型转换器
- android studio 在debug模式下使用release版签名
- 小程序实现不定个数选择框值的保存和显示
- 第四节:SpringBoot使用Freemaker模板
- 零基础怎么才能学好java培训课程
- selenium 基本方法使用二_javascript的应用_对input框执行输入(日历控件)
- 解读The Python Tutorial(四)
- git connflit 解决办法