Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何隐藏具有Qt::WA_DeleteOnClose标志的QDialog?_Qt_Windows Applications_Qdialog - Fatal编程技术网

如何隐藏具有Qt::WA_DeleteOnClose标志的QDialog?

如何隐藏具有Qt::WA_DeleteOnClose标志的QDialog?,qt,windows-applications,qdialog,Qt,Windows Applications,Qdialog,我有一个QDialog,它是用Qt::WA_DeleteOnClose标志创建的。当特定事件发生时,我需要隐藏对话框,并在以后发生另一个特定事件时恢复它。如果我调用QWidget::hide()对话框对象将被删除(由于WA_DeleteOnClose),这对我不起作用 不幸的是,由于某些技术原因,我无法在运行时取消设置/重置Qt::WA_DeleteOnClose 问题是:如何有效地隐藏QDialog,使其不可见但仍然存在?我试过了 QDialog* pDlg = ...; QSizePolic

我有一个
QDialog
,它是用
Qt::WA_DeleteOnClose
标志创建的。当特定事件发生时,我需要隐藏对话框,并在以后发生另一个特定事件时恢复它。如果我调用
QWidget::hide()
对话框对象将被删除(由于
WA_DeleteOnClose
),这对我不起作用

不幸的是,由于某些技术原因,我无法在运行时取消设置/重置
Qt::WA_DeleteOnClose

问题是:如何有效地隐藏
QDialog
,使其不可见但仍然存在?我试过了

QDialog* pDlg = ...;
QSizePolicy newSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
pDlg->setSizePolicy(newSizePolicy);
pDlg->setMinimumSize(0,0);
pDlg->resize(0,0); 
但这不起作用。可能是因为我可以将对话框移到桌面之外?或者

如果有关系的话,我只在Windows上


谢谢。

在弹出对话框之前,您不能暂时删除
Qt::WA_DeleteOnClose
属性,并在对话框可见时还原它吗?如果使用
showmimized()
,会发生什么情况?请尝试pDlg->hide(),正如我所说的,对话框对象正在被破坏。如果使用showmimized()会发生什么情况对话框会最小化,就好像它属于桌面一样。临时删除Qt::WA_DeleteOnClose attribute很遗憾,我不能。对话框可能绑定到后台线程,当线程完成时,它会隐藏对话框。如果我删除该标志,对话框将永久保留并包含过时的数据。如果您无法临时删除该标志,您可能需要在没有
Qt::WA_DeleteOnClose
的情况下执行该操作,并实现其他一些删除逻辑(例如,在线程完成后手动删除)