C++ Qt:关闭、销毁和以后删除之间有什么区别?

C++ Qt:关闭、销毁和以后删除之间有什么区别?,c++,qt,object,qtimer,C++,Qt,Object,Qtimer,close、destroy和deletelater之间有什么区别。我想在超时后杀死/删除一个对象 QTimer::singleShot(tim*1000, &qPopup, &QLabel::hide) 这里我使用了隐藏来隐藏对象。如果我使用关闭而不是隐藏,它会在超时后删除对象吗?销毁呢?关闭只是一种机制,为程序员提供了更大的灵活性,因为它可以用于在小部件/窗口关闭时执行特殊操作,例如,如果用户对文档有未保存的更改,则显示保存对话框而不是实际关闭窗口。默认情况下,小部件仅在关闭

close、destroy和deletelater之间有什么区别。我想在超时后杀死/删除一个对象

QTimer::singleShot(tim*1000, &qPopup, &QLabel::hide)

这里我使用了隐藏来隐藏对象。如果我使用关闭而不是隐藏,它会在超时后删除对象吗?销毁呢?

关闭只是一种机制,为程序员提供了更大的灵活性,因为它可以用于在小部件/窗口关闭时执行特殊操作,例如,如果用户对文档有未保存的更改,则显示保存对话框而不是实际关闭窗口。默认情况下,小部件仅在关闭时隐藏,不会被删除。然而,有一个重要的例外。如果所有应用程序顶级窗口都已关闭,则它们都将被删除,应用程序将退出

可以使用以下功能修改此行为:

myWidget->setAttribute( Qt::WA_DeleteOnClose, true ); // Widget will be deleted automatically when closed
myWidget->setAttribute( Qt::WA_DeleteOnClose, false ); // Widget will not be deleted automatically when closed unless it's the last visible widget.
qPopup->setAttribute( Qt::WA_DeleteOnClose, true );
QTimer::singleShot(tim*1000, &qPopup, &QLabel::close);
deleteLater函数标记要删除的小部件,但不会立即删除任何内容。该对象通常在下次运行循环时删除。这是删除小部件的首选方法,因为它可以防止在某些事件相关的情况下发生崩溃。如果您存储一个指向QWidget的指针,那么您应该在使用deleteLater后将其设置为nullptr,因为您不确定它实际何时会被删除:

myWidget->deleteLater();
myWidget = nullptr;
销毁是一个您可能永远不需要使用的功能。它由QWidget析构函数自动调用,并释放与窗口相关的系统资源。以后你应该坚持使用delete

因此,在您的示例中,您使用计时器在x毫秒后隐藏小部件。如果要删除它,请使用以下命令:

QTimer::singleShot(tim*1000, &qPopup, &QLabel::deleteLater);
或者您可以在小部件上设置delete_on_close标志,并将计时器连接到close功能:

myWidget->setAttribute( Qt::WA_DeleteOnClose, true ); // Widget will be deleted automatically when closed
myWidget->setAttribute( Qt::WA_DeleteOnClose, false ); // Widget will not be deleted automatically when closed unless it's the last visible widget.
qPopup->setAttribute( Qt::WA_DeleteOnClose, true );
QTimer::singleShot(tim*1000, &qPopup, &QLabel::close);

或者您可以继续使用隐藏功能,但知道它不会被删除,除非它是应用程序中最后一个可见的小部件。

关闭只是一种为程序员提供更大灵活性的机制,因为它可以用于在小部件/窗口关闭时执行特殊操作,例如显示保存对话框而不是实际关闭窗口窗口,如果用户对文档有未保存的更改。默认情况下,小部件仅在关闭时隐藏,不会被删除。然而,有一个重要的例外。如果所有应用程序顶级窗口都已关闭,则它们都将被删除,应用程序将退出

可以使用以下功能修改此行为:

myWidget->setAttribute( Qt::WA_DeleteOnClose, true ); // Widget will be deleted automatically when closed
myWidget->setAttribute( Qt::WA_DeleteOnClose, false ); // Widget will not be deleted automatically when closed unless it's the last visible widget.
qPopup->setAttribute( Qt::WA_DeleteOnClose, true );
QTimer::singleShot(tim*1000, &qPopup, &QLabel::close);
deleteLater函数标记要删除的小部件,但不会立即删除任何内容。该对象通常在下次运行循环时删除。这是删除小部件的首选方法,因为它可以防止在某些事件相关的情况下发生崩溃。如果您存储一个指向QWidget的指针,那么您应该在使用deleteLater后将其设置为nullptr,因为您不确定它实际何时会被删除:

myWidget->deleteLater();
myWidget = nullptr;
销毁是一个您可能永远不需要使用的功能。它由QWidget析构函数自动调用,并释放与窗口相关的系统资源。以后你应该坚持使用delete

因此,在您的示例中,您使用计时器在x毫秒后隐藏小部件。如果要删除它,请使用以下命令:

QTimer::singleShot(tim*1000, &qPopup, &QLabel::deleteLater);
或者您可以在小部件上设置delete_on_close标志,并将计时器连接到close功能:

myWidget->setAttribute( Qt::WA_DeleteOnClose, true ); // Widget will be deleted automatically when closed
myWidget->setAttribute( Qt::WA_DeleteOnClose, false ); // Widget will not be deleted automatically when closed unless it's the last visible widget.
qPopup->setAttribute( Qt::WA_DeleteOnClose, true );
QTimer::singleShot(tim*1000, &qPopup, &QLabel::close);

或者,您可以继续使用隐藏功能,但知道它不会被删除,除非它是应用程序中最后一个可见的小部件。

以后删除怎么样?以后删除怎么样?