Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7565911
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2013-12-18 16:19:01

  

对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。对话框分为模态和非模态两种。我们也将以这两种为例,分别进行阐述。

 

模态对话框使用了 exec() 函数将其显示出来。exec() 函数执行代码就会被阻塞,后面的语句也就不会被执行到。因此,对于使用了 exec() 显示的模态对话框,我们可以在exec() 函数之后直接从对话框的对象获取到数据值。

实际上,QDialog::exec() 是有返回值的,其返回值是 QDialog::Accepted或者 QDialog::Rejected。一般我们会使用类似下面的代码:

点击(此处)折叠或打开

  1. QDialog dialog(this);
  2. if (dialog.exec() == QDialog::Accepted) {
  3.     // do something
  4. } else {
  5.     // do something else
  6. }

 

如果是非模态对话框,QDialog::show() 函数会立即返回,我们换一种思路获取数据,那就是使用信号槽机制

由于非模态对话框在关闭时可以调用 QDialog::accept() 或者QDialog::reject() 或者更通用的 QDialog::done() 函数,所以我们可以在这里发出信号。另外,如果找不到合适的信号发出点,我们可以重写QDialog::closeEvent() 函数,在这里发出信号。在需要接收数据的窗口(这里是主窗口)连接到这个信号即可。类似的代码片段如下所示

点击(此处)折叠或打开

  1. // in dialog:
  2. void UserAgeDialog::accept()
  3. {
  4.     emit userAgeChanged(newAge); // newAge is an int
  5.     QDialog::accept();
  6. }

  7. // in main window:
  8. void MainWindow::showUserAgeDialog()
  9. {
  10.     UserAgeDialog *dialog = new UserAgeDialog(this);
  11.     connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge);
  12.     dialog->show();
  13. }

  14. // ...

  15. void MainWindow::setUserAge(int age)
  16. {
  17.     userAge = age;
  18. }


阅读(15497) | 评论(0) | 转发(2) |
0

上一篇:QT 对话框简介

下一篇:QT 标准对话框

给主人留下些什么吧!~~