QDialog,setResult后关闭对话框,获取的exec返回值不正确。
时间: 2024-02-17 09:01:36 浏览: 67
在使用QDialog时,如果在关闭对话框之前调用了setResult方法设置了返回值,那么在关闭对话框后获取的exec返回值确实会不正确。这是因为在关闭对话框时,exec方法返回的是关闭对话框时的返回值,而不是setResult方法设置的返回值。
要解决这个问题,可以在setResult方法之后调用done方法来关闭对话框并设置返回值。done方法会在关闭对话框之前将返回值设置好,然后调用accept或reject方法来关闭对话框,这样就可以正确获取到返回值了。
具体代码可以参考下面的示例:
```
QDialog dialog;
dialog.setResult(100);
dialog.done(QDialog::Accepted);
int result = dialog.result(); // 此时获取到的返回值为100
```
相关问题
在setResult方法之后调用done方法来关闭对话框并设置返回值,获取的exec返回值不正确。
如果在调用setResult方法之后,直接调用done方法来关闭对话框并设置返回值,那么获取的exec返回值确实会不正确。这是因为done方法会在关闭对话框之前将返回值设置好,但是在关闭对话框之后,exec方法返回的是关闭对话框时的返回值,而不是setResult方法设置的返回值。
要解决这个问题,可以在调用done方法之前先调用accept或reject方法来关闭对话框,然后再调用done方法来设置返回值。这样就可以正确获取到返回值了。
具体代码可以参考下面的示例:
```
QDialog dialog;
dialog.setResult(100);
dialog.accept(); // 或者 dialog.reject();
dialog.done(QDialog::Accepted);
int result = dialog.result(); // 此时获取到的返回值为100
```
需要注意的是,如果在调用accept或reject方法之前,有其他操作需要执行,比如保存数据或者验证输入等,那么应该在这些操作完成后再调用accept或reject方法来关闭对话框。
在setResult方法之后调用done方法来关闭对话框并设置返回值,获取的exec()返回值不正确
如果在调用setResult方法之后,调用done方法来关闭对话框并设置返回值,获取的exec返回值依然不正确,那么可能是因为done方法的调用时机不对。
done方法的作用是关闭对话框并设置返回值,因此它应该在对话框已经被关闭的情况下调用。如果在对话框还没有被关闭时就调用done方法,那么它就会在关闭对话框之前设置返回值,从而导致exec返回值不正确的问题。
解决这个问题的方法是,在调用setResult方法之后,先关闭对话框,然后再调用done方法来设置返回值。具体代码可以参考下面的示例:
```
QDialog dialog;
dialog.setResult(100);
dialog.hide(); // 隐藏对话框
dialog.done(QDialog::Accepted); // 设置返回值
int result = dialog.result(); // 此时获取到的返回值为100
```
在这个示例中,我们使用了hide方法来隐藏对话框,然后在调用done方法之前设置了返回值。这样就可以避免在关闭对话框之前设置返回值的问题,从而正确获取到exec返回值。
阅读全文