qt 父窗口下QDialog的子窗口关闭时父窗口也会关闭
时间: 2023-07-13 14:21:27 浏览: 120
在 Qt 中,QDialog 是一个模态对话框,打开 QDialog 后,父窗口会被阻塞,直到 QDialog 关闭。如果 QDialog 关闭时会导致父窗口关闭,那么有可能是 QDialog 的父窗口设置不正确导致的。
一种可能的情况是 QDialog 的父窗口设置为了 mainwindow,而 mainwindow 在关闭时会关闭所有子窗口,因此 QDialog 的关闭也会导致 mainwindow 关闭。为了避免这种情况,应该将 QDialog 的父窗口设置为一个独立的窗口,而不是 mainwindow。
另外一种可能的情况是 QDialog 的关闭事件被重载了,关闭事件中调用了父窗口的关闭函数。如果 QDialog 关闭时确实需要关闭父窗口,可以在 QDialog 的关闭事件中调用父窗口的关闭函数,但是需要先判断 QDialog 是否为模态对话框,如果是模态对话框,应该先关闭 QDialog,然后再关闭父窗口。如果 QDialog 不是模态对话框,可以直接关闭父窗口。
示例代码如下:
```
void MyDialog::closeEvent(QCloseEvent *event)
{
if (this->parentWidget()->isModal()) {
QDialog::closeEvent(event);
this->parentWidget()->close();
} else {
this->parentWidget()->close();
QDialog::closeEvent(event);
}
}
```
这段代码在 QDialog 的关闭事件中判断了父窗口是否为模态对话框,如果是模态对话框,先关闭 QDialog,再关闭父窗口;否则,先关闭父窗口,再关闭 QDialog。