Qt4关闭和销毁的区别?

Posted

技术标签:

【中文标题】Qt4关闭和销毁的区别?【英文标题】:Qt4 Differences between close and destroy? 【发布时间】:2014-06-30 12:04:50 【问题描述】:

当我为对话框键入命令 destroy() 时(我还没有尝试过其他类型的窗口)Qt 会返回此消息:

X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Extension:    130 (MIT-SHM)
  Minor opcode: 3 (X_ShmPutImage)
  Resource id:  0x0
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Extension:    130 (MIT-SHM)
  Minor opcode: 3 (X_ShmPutImage)
  Resource id:  0x0

但如果我输入“close()”,它就可以正常工作。

那么close()和destroy()有什么区别呢?或者有什么不同?

【问题讨论】:

【参考方案1】:

如果您没有充分的理由,则不应使用 destroy()。它应该是破坏的一部分,例如它在内部被调用以进行清理。错误消息表明在销毁期间,X 窗口资源被释放,仍然被引用。所以他们过早地被释放了。

另一方面,close() 方法是表示应关闭窗口/对话框的正确方法。它的作用与用户请求关闭窗口一样(例如,单击窗口框架标题上的关闭按钮)。

【讨论】:

换句话说:destroy 是一个受保护的方法是有充分理由的。我确信它可以在somewhere 中使用,但在 10 年的 Qt 编程中,我从未有过使用它的单一理由。哎呀,我早就忘记了它甚至在那里。

以上是关于Qt4关闭和销毁的区别?的主要内容,如果未能解决你的问题,请参考以下文章

销毁和删除的区别

WM_CLOSEWM_DESTROYWM_QUIT的区别(询问,销毁窗口,退出进程,都不是一回事)

[数据结构]链表中销毁和清空的区别

queue.wait() 和等待缓冲区销毁有啥区别

queue.wait() 和等待缓冲区销毁有啥区别

是否需要手动销毁和关闭 java.lang.Process 的打开流?