QDialog 数据传递
2016-05-24 15:36
363 查看
对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。对话框分为模态和非模态两种。我们也将以这两种为例,分别进行阐述。模态对话框使用了 exec() 函数将其显示出来。exec() 函数执行代码就会被阻塞,后面的语句也就不会被执行到。因此,对于使用了 exec() 显示的模态对话框,我们可以在exec() 函数之后直接从对话框的对象获取到数据值。实际上,QDialog::exec() 是有返回值的,其返回值是 QDialog::Accepted或者 QDialog::Rejected。一般我们会使用类似下面的代码:
如果是非模态对话框,QDialog::show() 函数会立即返回,我们换一种思路获取数据,那就是使用信号槽机制由于非模态对话框在关闭时可以调用 QDialog::accept() 或者QDialog::reject() 或者更通用的 QDialog::done() 函数,所以我们可以在这里发出信号。另外,如果找不到合适的信号发出点,我们可以重写QDialog::closeEvent() 函数,在这里发出信号。在需要接收数据的窗口(这里是主窗口)连接到这个信号即可。类似的代码片段如下所示
源文来自:http://blog.chinaunix.net/uid-24219701-id-4042825.html
QDialog dialog(this); if (dialog.exec() == QDialog::Accepted) { // do something } else { // do something else }
如果是非模态对话框,QDialog::show() 函数会立即返回,我们换一种思路获取数据,那就是使用信号槽机制由于非模态对话框在关闭时可以调用 QDialog::accept() 或者QDialog::reject() 或者更通用的 QDialog::done() 函数,所以我们可以在这里发出信号。另外,如果找不到合适的信号发出点,我们可以重写QDialog::closeEvent() 函数,在这里发出信号。在需要接收数据的窗口(这里是主窗口)连接到这个信号即可。类似的代码片段如下所示
// in dialog: void UserAgeDialog::accept() { emit userAgeChanged(newAge); // newAge is an int QDialog::accept(); }
// in main window: void MainWindow::showUserAgeDialog() { UserAgeDialog *dialog = new UserAgeDialog(this); connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge); dialog->show(); }
void MainWindow::setUserAge(int age) { userAge = age; }
源文来自:http://blog.chinaunix.net/uid-24219701-id-4042825.html
相关文章推荐
- MooBox 基于Mootools的对话框插件
- 基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
- C#实现在前端网页弹出警告对话框(alert)的方法
- Android开发必知 九种对话框的实现方法
- Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码
- Android列表对话框用法实例分析
- C#使用Word中的内置对话框实例
- MFC对话框中添加状态栏的方法
- jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
- 基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
- JavaScript弹出对话框的三种方式
- 用JavaScript实现对话框的教程
- Asp.net 弹出对话框基类(输出alet警告框)
- boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
- 自制轻量级仿jQuery.boxy对话框插件代码
- jQuery代码实现对话框右上角菜单带关闭×
- 基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
- JS 模态对话框和非模态对话框操作技巧汇总
- jquery ui对话框实例代码
- Android中自定义对话框(Dialog)的实例代码