Qt工作笔记-右键菜单造成内存泄漏等分析
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-右键菜单造成内存泄漏等分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序很簡單,就是右鍵菜單點擊:
?
以前的我(菜雞)沒有關注這個問題,現在的我(也是菜雞)開始關注這個問題了!
運行時候,他的占用率:
當對他右鍵點擊》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)); }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-右键菜单造成内存泄漏等分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python工作笔记-统计文件夹内只有1
- 下一篇: Qt3转Qt5(Ui部分)