Qt 我如果在QWidget::contextMenuEvent函数中new QMenu来实现右键菜单,是否会造成内存泄露?
发布网友
发布时间:2022-05-26 12:51
我来回答
共1个回答
热心网友
时间:2023-10-17 22:29
QT有内存回收机制
QMenu* popMenu = new QMenu(this);
这种神情方式下,当父类窗口(this所代表的窗口)关闭时,QMenu所占用的内存会一起被回收
还有一种减小内存申请量的方法,就是在类gwExportAIsSettings中建立一个QMenu的private变量,每次调用contextMenuEvent方法时,直接为其添加action即可,这样只new一次就可以了。追问也就是说如果父窗口不关闭,我不断的点击鼠标右键弹出菜单,就会一直new是吗?这些申请的内存会在父窗口关闭时一起释放?那岂不是每次new的内存在释放之前还得和父窗口关联起来?
追答QT的机制是这样的,要是想单独进行内存回收,就这样申请
QMenu* popMenu = new QMenu(NULL); 然后想办法自己在适当的方法中delete
或者你使用上面说的第二种方法!只申请一次就可以了