我有一个带有QDialog类的对话框窗口。 我在头文件中声明为:
MyDialogClass myDialogWindow = nullptr;
并使用
在运行时的某个地方创建窗口
myDialogWindow = new MyDialogClass(this);
由于其属性,它也是delf销毁:
this->setAttribute(Qt::WA_DeleteOnClose);
现在有人在没有连接信号的情况下自动删除后如何将myDialogWindow指针设置为nullptr吗?
谢谢。
答案 0 :(得分:10)
没有一些信号或事件逻辑,这是不可能的。该对象不拥有该指针,该指针指向该对象。
但是,您可以使用QPointer,它可以为您包装信号处理和归零。
QPointer<MyDialogClass> myDialogWindow;
myDialogWindow = new MyDialogClass(this);
myDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
// some time later, check dialog has not been closed
if( ! myDialogWindow.isNull() )
{
// do something with dialog
}
答案 1 :(得分:1)
您通常不能这样做。任何T
都不知道它是被用作T
还是T&
还是T*
,并且您不能自动将所有相关的T*
更改为{{1 }}来自nullptr
内部(因为它不了解它们)。
您还需要一些其他方式来通知您的T
实例已被破坏-例如,一个信号。
答案 2 :(得分:1)
您可以捕获对象被破坏的时间,并擦除指针。
connect(myDialogWindow, &QObject::destroyed, [&myDialogWindow](){ myDialogWindow = nullptr;});