您的位置:首页 > 编程语言 > Qt开发

QT 对话框数据传递

2014-04-16 10:21 204 查看
http://blog.chinaunix.net/uid-24219701-id-4042825.html

对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。对话框分为模态和非模态两种。我们也将以这两种为例,分别进行阐述。
 
模态对话框使用了 exec() 函数将其显示出来。exec() 函数执行代码就会被阻塞,后面的语句也就不会被执行到。因此,对于使用了 exec() 显示的模态对话框,我们可以在exec() 函数之后直接从对话框的对象获取到数据值。

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

点击(此处)折叠或打开

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: