在QT关闭时从子窗口句柄中删除内存
Delete memory to window handle from child on close in QT
让我们看看我的conf:
mainwindow.h
second_window.h
- 在类方法(
public: second_window * h_window;
)中保持指向second_window
的指针 -
mainwindow
类打开second_window
类
在second_window
中我捕获eventClose();
这里我想要delete h_window;
但是我得到了一个访问错误,我认为窗口仍然打开,所以当我试图删除指针内存时,我得到了错误。
当我应该删除这个指针的其他想法?
如果为second_window
设置了父对象,则不需要删除该对象:
h_window = new second_window(this); // in the constructor of mainwindow
当对象被删除并且它有子对象时,析构函数自动删除每个子对象。因此,当父对象被删除时,子对象也会自动被删除。
建议在堆上创建子对象并立即创建父对象。如果您不立即父化,您可以使用setParent()
函数显式地父化。
如果出于某种原因你不希望你的对象有父对象,你也可以使用QSharedPointer
来管理对象的生命周期
如果两个窗口都是独立的,因此没有父窗口,那么解决的方法是使用QPointer和setAttribute(Qt::WA_DeleteOnClose)。
class mainwindow : public QWidget {
public:
~mainwindow() {
delete h_window; // deletes h_window if it is not 0 (that is, not closed yet)
}
void showSecondWindow() {
if ( ! h_window ) {
h_window = new second_window();
}
h_window->show();
h_window->activateWindow();
}
private:
QPointer<second_window> h_window; // h_window will automatically become 0 when second_window is deleted.
}
class second_window : public QWidget {
public:
second_window() {
setAttribute(Qt::WA_DeleteOnClose); // automatically delete itself when window is closed
}
}
相关文章:
- 如何获取边缘窗口句柄 (HWND)?
- 从运行服务的应用程序代码中提取窗口句柄
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- QOpenGLWidget:检索第三方库的窗口句柄
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 编写 Windows 桌面应用程序时,我应该在哪里跟踪我的窗口句柄?
- 为什么错误1400无效的窗口句柄
- cmfctoolbarcomboboxedit句柄删除按钮
- 如何从exe文件的名称中查找窗口句柄
- 捕获新创建的模态对话框的窗口句柄
- 获取 ActiveX 窗口句柄
- 如何正确传递窗口句柄
- 如何将窗口句柄从C#传递到C Win32 DLL
- 窗口句柄无法正确保存
- 获取光标下窗口的窗口句柄
- C++:通过进程id、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法
- 错误 1400 无效的窗口句柄
- 将消息发送到窗口句柄
- 将 C# 窗口句柄传递给非托管代码 - 跨线程异常
- 在QT关闭时从子窗口句柄中删除内存