程序很简单,就是右键菜单点击:
以前的我(菜鸡)没有关注这个问题,现在的我(也是菜鸡)开始关注这个问题了!
运行时候,他的占用率:
当对他右键点击》10次时,内存占用率如下:
并且每一次点击,都会增加空间,
造成这个原因是因为,new出的东西没有delete!
这一段错误代码如下:
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));
}