Qt工作笔记-右键菜单造成内存泄漏等分析

程序很简单,就是右键菜单点击:

以前的我(菜鸡)没有关注这个问题,现在的我(也是菜鸡)开始关注这个问题了!

运行时候,他的占用率:

当对他右键点击》10次时,内存占用率如下:

并且每一次点击,都会增加空间,

造成这个原因是因为,new出的东西没有delete!

扫描二维码关注公众号,回复: 2827643 查看本文章

这一段错误代码如下:

void Widget::onListContextMenu(const QPoint &pt)
{
    QMenu *menu=new QMenu;
    menu->addAction("11111111111111111111");
    menu->addAction("22222222222222222222");
    menu->addAction("33333333333333333333");
    menu->exec(ui->listWidget->mapToGlobal(pt));
}

右击的时候,只关注new,没有去delete,

这里要注意这个exec他是同步的进入事件循环(内部应该把QMenu给备份了)

正确的代码:

方式一:

void Widget::onListContextMenu(const QPoint &pt)
{
    QMenu *menu=new QMenu;
    menu->addAction("11111111111111111111");
    menu->addAction("22222222222222222222");
    menu->addAction("33333333333333333333");
    menu->exec(ui->listWidget->mapToGlobal(pt));
    delete menu;
}

方式二:

void Widget::onListContextMenu(const QPoint &pt)
{
    QMenu menu;
    menu.addAction("11111111111111111111");
    menu.addAction("22222222222222222222");
    menu.addAction("33333333333333333333");
    menu.exec(ui->listWidget->mapToGlobal(pt));
    QMenu.exec(ui->listWidget->mapToGlobal(pt));
}

方式三:

#include "widget.h"
#include "ui_widget.h"
#include <QMenu>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    m_menu=new QMenu;
    m_menu->addAction("11111111111111111111");
    m_menu->addAction("22222222222222222222");
    m_menu->addAction("33333333333333333333");
    ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->listWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(onListContextMenu(QPoint)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onListContextMenu(const QPoint &pt)
{
    m_menu->exec(ui->listWidget->mapToGlobal(pt));
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81701094