精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

QT 上下文菜單內存泄露之QMainWindow

移動開發
本文介紹的是QT 上下文菜單內存泄露之QMainWindow,根據不同版本進行測試,并解決問題。先來看內容。

QT 上下文菜單內存泄露之QMainWindow 是本人要介紹的內容,先來看內容。創建Qt工程,基于QMainwindow,什么也不做,程序會自帶一個上下文菜單。

不斷點擊鼠標右鍵,菜單將反復出現,此時我用任務管理器查看其內存變化,發現每次不斷增加,請問大家這是Qt內存泄漏嗎???我用MFC,CB均沒有發現類此錯誤。

Qt 4.7.0 和 4.7.3下可以重現該問題,在Qt 4.6.3下不存在該問題。可以確定是Qt的一個bug。

問題重現

在工具欄或停靠窗口中點擊右鍵(彈出上下文菜單),多點擊幾次,然后點擊按鈕。觀察控制臺輸出,可以看到很多個 QMenu 對象。

  1. #include <QtGui> 
  2. class MainWindow : public QMainWindow  
  3. {  
  4.     Q_OBJECT  
  5. public:  
  6.     explicit MainWindow(QWidget *parent = 0);  
  7. private slots:  
  8.     void onButtonClicked();  
  9. };  
  10. MainWindow::MainWindow(QWidget *parent)  
  11. {  
  12.     addToolBar("ToolBar");  
  13.     addDockWidget(Qt::LeftDockWidgetArea, new QDockWidget("DockWidget"));  
  14.     QPushButton * btn = new QPushButton("dump object tree");  
  15.     setCentralWidget(btn);  
  16.     connect(btn, SIGNAL(clicked()), SLOT(onButtonClicked()));  
  17. }  
  18. void MainWindow::onButtonClicked()  
  19. {  
  20.     dumpObjectTree();  
  21. }  
  22. #include "main.moc"  
  23. int main(int argc, char *argv[])  
  24. {  
  25.     QApplication a(argc, argv);  
  26.     MainWindow w;  
  27.     w.show();  
  28.  
  29.     return a.exec();  

原因

既然是QMainWindow的上下文菜單問題,直接看 contextMenuEvent 事件處理函數吧。

  1. void QMainWindow::contextMenuEvent(QContextMenuEvent *event)  
  2. {  
  3.     event->ignore();  
  4. ...  
  5.     QMenu *popup = createPopupMenu();  
  6.     if (popup) {  
  7.         if (!popup->isEmpty()) {  
  8.             popup->setAttribute(Qt::WA_DeleteOnClose);  
  9.             popup->popup(event->globalPos());  
  10.             event->accept();  
  11.         } else {  
  12.             delete popup;  
  13.         }  
  14.     }  

看仔細嘍,這兒設置了 Qt::WA_DeleteOnClose 屬性。

有什么用?設置該屬性后,當我們調用該對象的 close() 成員時,隱藏(hide)窗口同時會刪除(delete)該對象

有什么問題?問題出在,實際上隱藏菜單時沒有 調用菜單的close(),而是 調用的hide()的成員。

調用hide()而不是close(),是的該屬性不能發揮任何作用,進而導致內存泄露(Qt 之 show,hide,setVisible,setHidden,close 等小結 )。

為了對比,我們看看Qt4.6.3的源碼部分:

  1. void QMainWindow::contextMenuEvent(QContextMenuEvent *event)  
  2. {  
  3.     event->ignore();  
  4. ...  
  5.     QMenu *popup = createPopupMenu();  
  6.     if (popup && !popup->isEmpty()) {  
  7.         popup->exec(event->globalPos());  
  8.         event->accept();  
  9.     }  
  10.     delete popup;  

而這個,也就是我們的比較理想的答案了。

進一步學習

前面說了,菜單隱藏時調用的是hide() 成員,而不是close() 成員。有神馬依據??

想想?如何讓菜單隱藏

鼠標:點擊菜單外區域

鍵盤:按下Esc鍵等

這樣就比較明朗了,對吧,直接看這兩個事件處理函數

鍵盤的按鍵事件(調用了hideMenu)

  1. void QMenu::keyPressEvent(QKeyEvent *e)  
  2. {  
  3.     Q_D(QMenu);  
  4.     d->updateActionRects();  
  5.     int key = e->key();  
  6. ...  
  7.     bool key_consumed = false;  
  8.     switch(key) {  
  9.     case Qt::Key_Escape:  
  10.         key_consumed = true;  
  11.         {  
  12.             QPointer<QWidget> caused = d->causedPopup.widget;  
  13.             d->hideMenu(this); // hide after getting causedPopup  
  14.             if (QMenuBar *mb = qobject_cast<QMenuBar*>(caused)) {  
  15.                 mb->d_func()->setCurrentAction(d->menuAction);  
  16.                 mb->d_func()->setKeyboardMode(true);  
  17.             }  
  18.         }  
  19.         break;鼠標在菜單區域外按鍵,調用了hideUpToMenuBar(進而調用hideMenu)   
  20. void QMenu::mousePressEvent(QMouseEvent *e)  
  21. {  
  22.     Q_D(QMenu);  
  23. ...  
  24.     if (!rect().contains(e->pos())) {  
  25.          if (d->noReplayFor  
  26.              && QRect(d->noReplayFor->mapToGlobal(QPoint()), d->noReplayFor->size()).contains(e->globalPos()))  
  27.              setAttribute(Qt::WA_NoMouseReplay);  
  28.          if (d->eventLoop) // synchronous operation  
  29.              d->syncAction = 0;  
  30.         d->hideUpToMenuBar();  
  31.         return;  
  32.     }  

前面都調用了hideMenu,從名字也能猜猜它想干什么:

  1. void QMenuPrivate::hideMenu(QMenu *menu, bool justRegister)  
  2. {  
  3. ...  
  4.         menu->hide();  

小結:QT 上下文菜單內存泄露QMainWindow 的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2012-08-01 09:58:12

Mountain Li操作系統

2017-05-11 14:00:02

Flask請求上下文應用上下文

2012-12-31 10:01:34

SELinuxSELinux安全

2022-09-14 13:13:51

JavaScript上下文

2018-06-17 08:38:17

微軟Windows應用程序

2022-09-15 08:01:14

繼承基礎設施基礎服務

2023-07-11 10:02:23

2022-10-28 16:24:33

Context上下文鴻蒙

2024-09-30 14:10:00

2025-03-18 08:14:05

2017-12-17 17:01:23

限界上下文系統模型

2021-05-09 21:50:48

項目實踐上下文

2022-10-31 15:34:30

python裝飾器內存泄漏

2020-07-24 10:00:00

JavaScript執行上下文前端

2021-07-26 07:47:36

Cpu上下文進程

2025-06-06 08:00:00

上下文管理器Python開發

2021-07-20 19:30:05

微軟Windows 11Windows

2025-10-13 08:00:00

2019-05-06 14:36:48

CPULinux寄存器

2012-07-30 16:29:40

架構架構模式.NET
點贊
收藏

51CTO技術棧公眾號

91在线播放网址| 欧美视频官网| 91精品国产高清一区二区三区| 宅男一区二区三区| 男人天堂一区二区| 免费xxxx性欧美18vr| 色综合91久久精品中文字幕| 日本黄色免费观看| 欧美三级电影网址| 午夜精品成人在线视频| 亚洲午夜激情| 天天躁日日躁狠狠躁伊人| 日本欧美加勒比视频| 欧美激情久久久久久| 中文字幕在线1| 久久久久久亚洲精品美女| 日韩欧美成人网| 亚洲av综合色区| 国产高清视频在线观看| 国产99久久久国产精品潘金网站| 国产成人精品视| 久久网中文字幕| 欧美第一精品| 亚洲欧美一区二区三区四区 | 美女视频网站黄色亚洲| 欧美精品国产精品日韩精品| 一级特黄曰皮片视频| 国产一区二区三区不卡av| 欧美乱妇20p| 妞干网在线免费视频| 7777kkk亚洲综合欧美网站| 国产精品国模大尺度视频| 免费观看成人高| 成人午夜福利视频| 韩国成人精品a∨在线观看| 国产不卡精品视男人的天堂| 国产精品6666| 欧美日本中文| 久久亚洲精品网站| 老司机精品免费视频| 国产va免费精品观看精品视频| 精品国产乱码91久久久久久网站| 久久久精品视频国产| 少妇精品视频一区二区免费看| 狠狠做深爱婷婷久久综合一区 | 精品女人久久久| 免费看成人哺乳视频网站| 亚洲精品国产suv| 久久久久久久人妻无码中文字幕爆| 久久一级大片| 91精品午夜视频| 欧美大片久久久| 日韩欧国产精品一区综合无码| 欧美午夜精品久久久| 成人在线观看a| 欧美人体一区二区三区| 色婷婷精品久久二区二区蜜臂av| 欧美在线一区视频| 91福利区在线观看| 狠狠色狠狠色综合日日五| 国产亚洲综合视频| 日本综合视频| 欧美精品日韩精品| 国产欧美精品一二三| www.欧美视频| 日韩欧美久久久| 蜜桃视频无码区在线观看| 亚洲精品黑牛一区二区三区| 日韩欧美国产电影| 妖精视频一区二区| 亚洲精品无吗| 一区三区二区视频| 久草福利资源在线| 欧美日本三区| 97超碰色婷婷| 自拍偷拍校园春色| 精油按摩中文字幕久久| 99视频国产精品免费观看| 好男人在线视频www| 91丨porny丨首页| 日本一区二区在线视频观看| 日本中文字幕在线视频| 一区二区视频在线| 亚洲熟妇国产熟妇肥婆| 四虎影视4hu4虎成人| 91精品国产综合久久香蕉的特点| 伊人精品视频在线观看| 国产精品久久久久久久久久白浆 | 91免费版黄色| 亚洲人视频在线观看| 国产精品女同一区二区三区| 成人午夜免费剧场| 欧美aaaaa性bbbbb小妇| 欧美日本韩国一区| 插我舔内射18免费视频| 成人羞羞网站入口| 欧美国产中文字幕| 黄色大全在线观看| 成人免费av资源| 无遮挡亚洲一区| sis001亚洲原创区| 欧美日韩视频在线观看一区二区三区 | www.av在线播放| 亚洲欧美日韩国产另类专区 | 日韩视频中文字幕在线观看| 99视频精品免费观看| 国产人妖伪娘一区91| 婷婷国产在线| 一区二区三区四区蜜桃| 天天干在线影院| 精品女人视频| 欧美理论电影在线观看| 欧美性受xxx黑人xyx性爽| 国产成人a级片| 亚洲欧美丝袜| 成人私拍视频| 精品av综合导航| 欧美肥妇bbwbbw| 视频一区二区欧美| 国产日韩欧美综合精品| 黄色的网站在线观看| 91福利在线导航| 亚洲av成人片色在线观看高潮| 午夜av一区| 国产精品黄色影片导航在线观看| 日韩在线观看视频一区二区三区| 国产精品久久久久久久裸模 | 欧美极品免费| 亚洲国产精品999| 亚洲最大的黄色网址| 美女一区二区视频| 欧美一区二区三区精美影视| 国产不卡人人| 精品少妇一区二区| 欧美特级一级片| 狠狠色丁香久久婷婷综合_中| 日韩av在线一区二区三区| 中文字幕这里只有精品| 亚洲精品狠狠操| 欧美亚洲天堂网| 成人午夜av电影| 国产xxxx振车| 成人精品动漫一区二区三区| 色综合色综合久久综合频道88| 一级黄色片在线看| 国产精品不卡视频| 99热一区二区| 午夜国产一区二区| 国产日韩欧美在线播放| 69xxxx欧美| 欧美精品 国产精品| 91n在线视频| 国产主播一区二区| 好吊色视频988gao在线观看| 秋霞影院一区| 欧美国产第一页| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 亚洲一级av毛片| 中文一区二区完整视频在线观看| 日本超碰在线观看| 91精品亚洲| 成人精品一二区| 国产传媒在线观看| 精品五月天久久| 国产在线一级片| 综合精品久久久| 天堂va欧美va亚洲va老司机| 在线播放亚洲| 欧美aaaaa喷水| av亚洲一区| 久久精品中文字幕| 老司机午夜福利视频| 黑人巨大精品欧美一区二区免费| 国产中年熟女高潮大集合| 日韩电影在线观看电影| dy888午夜| 激情亚洲另类图片区小说区| 日韩av男人的天堂| 免费黄网站在线播放| 日韩欧美不卡一区| 天天干天天干天天操| 国产精品国产三级国产aⅴ原创 | 国产亚洲欧美日韩俺去了| 青青草av网站| 综合激情婷婷| 欧美成人免费在线| 国产亚洲字幕| 欧美一区二区.| 国产日产一区二区| 亚洲精品久久久一区二区三区 | 精品无人码麻豆乱码1区2区| av免费看网址| 欧美一区二区三区高清视频| 91九色极品视频| 波多视频一区| 欧美理论电影在线播放| 成人午夜电影在线观看| 精品国产123| 亚洲欧美日韩一区二区三区四区| 尤物视频一区二区| 久久午夜精品视频| 不卡av在线网| 亚洲精品在线视频播放| 久久av一区二区三区| 欧美黄色免费网址| 黑人操亚洲人| 国产日韩一区欧美| 香蕉久久一区| 日韩免费高清在线观看| 手机av免费在线| 最新的欧美黄色| 三级国产在线观看| 精品国产乱码久久久久久影片| 瑟瑟视频在线免费观看| 精品久久久一区二区| 18岁成人毛片| 国产精品久久久久久户外露出| 国产在线观看无码免费视频| 国产激情一区二区三区四区 | 色综久久综合桃花网| 日本v片在线免费观看| 精品伦理精品一区| 国产乱码久久久久| 欧美日韩第一区日日骚| 人人爽人人爽人人片av| 亚洲成年人影院| 毛片a片免费观看| 一区二区三区中文字幕精品精品| 欧美成人另类视频| 国产亚洲人成网站| 亚洲熟妇无码av| 久久综合久久综合久久综合| 精产国品一区二区三区| 狠狠色狠狠色综合系列| 永久免费的av网站| 免费成人在线观看| 天天干天天操天天玩| 日韩电影一区二区三区四区| 一本色道无码道dvd在线观看| 午夜一级久久| 国产l精品国产亚洲区久久| 99国产精品私拍| 国产欧美日韩网站| 亚洲精品少妇| 凹凸国产熟女精品视频| 免费亚洲一区| 欧美成人免费高清视频| 久久久久久久尹人综合网亚洲| 激情综合在线观看| 三级亚洲高清视频| 欧美伦理视频在线观看| 天堂午夜影视日韩欧美一区二区| 国产女女做受ⅹxx高潮| 视频一区二区国产| 在线免费观看视频黄| 久久激五月天综合精品| 911av视频| 国产高清精品网站| 色悠悠在线视频| 91亚洲午夜精品久久久久久| 国产精品亚洲无码| 国产精品毛片高清在线完整版| 萌白酱视频在线| 亚洲精品视频在线| 日本少妇毛茸茸高潮| 一本大道久久a久久精二百| 成人毛片一区二区三区| 欧美精品一级二级| 亚洲AV无码一区二区三区少妇| 精品播放一区二区| 精品电影在线| 久久亚洲私人国产精品va| 丝袜美腿av在线| 欧美主播福利视频| 激情久久一区二区| 成人欧美一区二区三区视频| 亚洲盗摄视频| 中文字幕在线中文字幕日亚韩一区 | 国产99久久久国产精品潘金网站| 真人bbbbbbbbb毛片| 日本一区二区三区在线观看| 欧美激情图片小说| 狠狠色狠狠色综合日日小说| 91麻豆国产视频| 精品国产成人系列| 波多野结衣一区二区| 欧美精品制服第一页| 午夜不卡影院| 成人黄色生活片| 日日狠狠久久偷偷综合色| 中文字幕日韩一区二区三区| 亚洲国产清纯| 欧美在线aaa| 91亚洲精品久久久蜜桃网站 | 亚洲va国产天堂va久久en| 99re国产在线| 精品久久99ma| aⅴ在线视频男人的天堂| 久久久女女女女999久久| jizzjizz少妇亚洲水多| 国产91视觉| 色综合久久一区二区三区| 久久国产亚洲精品无码| 国产一区二区三区久久久| 精品人妻中文无码av在线| 亚洲主播在线观看| 岳乳丰满一区二区三区| 亚洲欧美福利视频| 日韩欧美一起| 成人两性免费视频| 国产剧情一区| 免费观看国产精品视频| 韩国精品久久久| 在线免费观看视频| 欧美日韩国产中文字幕 | 成人av第一页| 精品国产大片大片大片| 在线观看视频一区| 婷婷在线免费观看| 欧美国产日本高清在线 | 三级资源在线| 国产在线视频91| 精品国产欧美日韩| 国产极品尤物在线| 处破女av一区二区| 国产精品三区在线观看| 7777精品伊人久久久大香线蕉完整版 | 日韩网红少妇无码视频香港| 日韩欧美国产综合一区 | 中日韩免视频上线全都免费| 久久亚洲精品无码va白人极品| 国产真实精品久久二三区| 欧美日韩生活片| 欧美在线|欧美| 韩国免费在线视频| 日本韩国在线不卡| 亚洲人成网www| 国产女女做受ⅹxx高潮| 久久久久久一二三区| 免费在线不卡视频| 亚洲国产精品va在线观看黑人| 2001个疯子在线观看| 国产精品一区二区三区在线 | 日本激情视频在线| 国产午夜精品在线观看| 销魂美女一区二区| 亚洲人成在线观看| 91成人抖音| 自拍亚洲欧美老师丝袜| 国产美女一区二区| 黄色一级视频免费观看| 欧美videofree性高清杂交| 污视频网站在线免费| 国产99在线免费| 亚洲高清免费| 9.1成人看片免费版| 色偷偷久久人人79超碰人人澡| 久久经典视频| 国产精品成人在线| 色喇叭免费久久综合网| 黄色一级片免费播放| 亚洲在线成人精品| 天堂av一区二区三区| 欧洲美女7788成人免费视频| 激情综合网五月| www.色就是色.com| 一区二区三区不卡视频 | 日韩一区在线视频| 久久久91麻豆精品国产一区| 霍思燕三级露全乳照| 久久久亚洲精品一区二区三区| 一区二区三区麻豆| 久久最新资源网| 美女av一区| 中文字幕在线观看第三页| √…a在线天堂一区| 成人乱码一区二区三区| 国产z一区二区三区| 伊人情人综合网| 狠狠人妻久久久久久综合蜜桃| 欧美网站一区二区| 伊人在我在线看导航| 久久综合毛片| 九色porny丨国产精品| 午夜影院在线看| 日日狠狠久久偷偷四色综合免费| 香蕉免费一区二区三区在线观看| 免费无码国产v片在线观看| 亚洲欧美在线视频观看| 午夜av免费在线观看| 国产精品一二三视频| 亚洲美女黄网| 国产精品麻豆免费版现看视频| 欧美videossexotv100| 丰满少妇一区| 久久亚洲中文字幕无码| 综合久久久久久| 你懂得网站在线| julia一区二区中文久久94| 日韩黄色免费网站|