精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

午夜精品在线免费观看| 精品1区2区| 熟女av一区二区| 大香伊人久久精品一区二区| 日韩欧美亚洲成人| 亚洲欧洲免费无码| 高h放荡受浪受bl| 老鸭窝毛片一区二区三区| 日韩视频在线一区| 久久久久麻豆v国产精华液好用吗| 美女日韩欧美| 一区二区三区.www| 玛丽玛丽电影原版免费观看1977| 中文字幕+乱码+中文乱码91| 韩国久久久久| 中文字幕精品在线视频| 亚洲成年人在线观看| 成人在线黄色| 精品福利免费观看| 国产成人亚洲综合无码| 国产精品视频二区三区| 成人午夜在线免费| 91视频国产精品| 波多野结衣视频观看| 国产主播一区| 免费91在线视频| 99国产精品免费| 偷拍亚洲色图| 精品少妇一区二区三区免费观看| 国产免费又粗又猛又爽| 91av亚洲| 欧美日韩美女在线观看| 成人免费a级片| 蜜芽在线免费观看| 国产亚洲污的网站| 免费在线观看一区二区| 成人久久久精品国产乱码一区二区 | 日韩毛片久久久| 久久久久久99久久久精品网站| 99re在线视频观看| 国产精品伊人久久| 蜜臂av日日欢夜夜爽一区| 日韩av免费网站| 东京热一区二区三区四区| 日韩一区二区免费看| 欧美高清视频在线播放| 国产盗摄x88av| 午夜久久免费观看| 久久久精品视频成人| 欧美a级片免费看| 日韩国产欧美一区二区| 日韩中文在线不卡| 亚洲精品自拍视频在线观看| 日韩在线视频精品| 日韩视频一区在线| 亚洲女人久久久| 亚洲欧洲日韩| 色综合视频一区中文字幕| 免费日韩在线视频| 99riav国产精品| 91精品国产高清| 中文字幕日韩免费| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品人成电影| 国产一区二区女内射| 国内久久精品视频| 99国产超薄肉色丝袜交足的后果| 亚洲女同志亚洲女同女播放| 成人黄色在线网站| 久久www免费人成精品| 完全免费av在线播放| 亚洲成人在线网站| 国产在线青青草| 日本成人片在线| 在线成人免费视频| 无码人妻一区二区三区免费n鬼沢| 国产精品tv| 亚洲欧洲免费视频| 亚洲色图 激情小说| 91精品综合久久久久久久久久久| 欧美裸身视频免费观看| 国产成人无码精品久久久久| 久久国产高清| 成人午夜小视频| 四虎永久在线精品免费网址| 国产日本欧洲亚洲| 强开小嫩苞一区二区三区网站| 超碰在线最新网址| 欧美色网站导航| 一起草最新网址| 香蕉久久夜色精品国产更新时间| 有码中文亚洲精品| 久久一级黄色片| 久久亚洲图片| 91精品网站| 天堂av在线免费观看| 成人欧美一区二区三区小说| 久草热视频在线观看| 图片一区二区| 精品一区二区三区三区| 最新一区二区三区| 久久九九精品| 国产精品国产三级欧美二区 | 久久手机免费视频| 午夜精品三级久久久有码| 麻豆国产精品视频| 久久综合色一本| 91香蕉在线观看| 欧美色涩在线第一页| 伦理片一区二区| 91精品啪在线观看国产18| 欧洲亚洲免费视频| 成人黄色在线观看视频| 欧美国产激情一区二区三区蜜月| 草b视频在线观看| 台湾天天综合人成在线| 国产亚洲精品久久久久久777| 国产亚洲小视频| 久久99精品久久只有精品| 欧洲精品码一区二区三区免费看| 欧美videosex性极品hd| 欧美精品在线一区二区三区| 国产在线观看h| 亚洲激情网址| 99精品国产高清一区二区| 2017亚洲天堂1024| 欧美午夜理伦三级在线观看| 免费成人深夜夜行p站| 欧美视频亚洲视频| 7777精品久久久大香线蕉小说| 岛国最新视频免费在线观看| 欧美性xxxx极品hd满灌| 日本黄色录像片| 黄色成人在线网址| 亚洲aa在线观看| 麻豆tv入口在线看| 欧美日韩免费在线视频| 成人无码av片在线观看| 日韩国产欧美一区二区三区| 久久香蕉综合色| 交100部在线观看| 亚洲国产欧美久久| 日韩成人免费观看| gogo大胆日本视频一区| 美女扒开大腿让男人桶| 国产一区二区三区亚洲| 久久久久亚洲精品成人网小说| 国产夫妻性生活视频| 亚洲激情六月丁香| 性高潮久久久久久| 欧美精品观看| 成人综合电影| а√在线中文在线新版| 日韩成人在线电影网| 亚洲午夜18毛片在线看| 久久久99精品久久| 99热这里只有精品在线播放| 欧美国产一区二区三区激情无套| 成人激情视频在线观看| 在线heyzo| 欧美精品一区二区高清在线观看| 日韩手机在线观看| 久久夜色精品一区| 另类图片亚洲另类| 日韩免费高清一区二区| 夜夜嗨av一区二区三区网站四季av| 国产精品高清一区二区三区| 一个人www视频在线免费观看| 亚洲欧美日韩久久久久久| 91porny九色| 国产精品灌醉下药二区| 中文字幕 欧美 日韩| 99精品免费视频| 日韩av一区二区三区在线| 香蕉久久一区| 欧美极品少妇xxxxx| 飘雪影视在线观看免费观看| 欧美日产在线观看| 久久精品视频9| 国产亚洲成年网址在线观看| 午夜一级免费视频| 亚洲美女一区| 亚洲午夜精品国产| 久久99精品久久久久久欧洲站| 奇门遁甲1982国语版免费观看高清| 成年网站在线| 欧美va亚洲va| 成人小视频在线播放| 亚洲免费观看在线观看| 国产在线观看无码免费视频| 狠狠网亚洲精品| 国产女大学生av| 亚洲色图欧美| 欧美精品一区二区视频| 国产在线一区不卡| 日本久久久久亚洲中字幕| 高清免费电影在线观看| 久久久噜噜噜久久人人看| 天天爽天天爽夜夜爽| 亚洲午夜久久久久久尤物| 日韩欧美精品在线不卡| caoporn成人免费视频在线| 国产精品老女人精品视频| 欧美极品少妇videossex| 国产一区二区三区在线观看网站 | 午夜精品一区二区三级视频| a级高清视频欧美日韩| 国产乱女淫av麻豆国产| 亚洲欧美久久| 一二三四视频社区在线| 五月开心六月丁香综合色啪| 欧美日韩免费精品| 粉嫩一区二区三区四区公司1| 国产精品免费电影| 久久男人av资源站| 欧美激情精品久久久久久久变态 | 有码一区二区三区| 国产一二三四区在线| 99久久国产综合精品色伊| 自拍视频第一页| 狠狠色丁香婷婷综合久久片| 精品少妇无遮挡毛片| 一本久久综合| 夜夜添无码一区二区三区| 91精品精品| 亚洲精品在线免费看| 国产精品一区二区三区av麻| 久久精彩视频| 女仆av观看一区| 国产精品一区二区欧美黑人喷潮水 | 国产日韩欧美中文| 成人黄色在线| 国产精品久久久精品| 外国成人直播| 欧美最猛性xxxxx(亚洲精品)| 99thz桃花论族在线播放| 欧美日本中文字幕| 在线免费av导航| 欧美久久精品午夜青青大伊人| 快射视频在线观看| 精品国产依人香蕉在线精品| 日本在线观看网站| 久久久av一区| 怡红院av在线| 欧美激情视频免费观看| 日韩伦理电影网站| 欧美精品久久久久| av漫画网站在线观看| 97婷婷大伊香蕉精品视频| 日本乱码一区二区三区不卡| 2024亚洲男人天堂| av有声小说一区二区三区| 国产999精品| 成人黄色免费网站| 91在线观看免费网站| 国产精品视频一区二区三区| 亚洲free性xxxx护士白浆| 91精品尤物| 国内精品久久国产| 欧美人与牛zoz0性行为| 天堂精品视频| 亚洲先锋影音| 青青青青在线视频| 美女黄色成人网| 国产日韩欧美久久| 国产精品99久久久| 艳妇乳肉豪妇荡乳xxx| 久久蜜桃香蕉精品一区二区三区| 夫妇露脸对白88av| 亚洲自拍偷拍网站| 亚洲午夜18毛片在线看| 欧美日韩成人高清| 丰满熟妇乱又伦| 国产一区二区日韩| 1stkiss在线漫画| 97成人精品区在线播放| 成人在线黄色| 粉嫩高清一区二区三区精品视频 | 成人亚洲网站| 高清国产在线一区| 国产伦精品一区二区三区视频| 正在播放91九色| 在线亚洲免费| 一区二区三区欧美精品| www.成人网.com| 国产精品情侣呻吟对白视频| 亚洲国产欧美在线| 在线黄色av网站| 亚洲成色777777女色窝| 91精品大全| 97精品免费视频| 亚洲青青久久| 精品无人区一区二区三区 | 久久色在线视频| 欧美日韩色视频| 色欧美日韩亚洲| 二区三区在线视频| 日韩在线视频播放| 欧美xxxhd| 亚洲综合精品一区二区| 国产精品嫩草影院在线看| 福利在线小视频| 免费成人美女在线观看| 亚洲一区二区乱码| 亚洲品质自拍视频| 国产91精品看黄网站在线观看| 精品日韩成人av| 看黄网站在线| 国产精品久久久久国产a级| 欧美激情极品| 公共露出暴露狂另类av| 日本aⅴ免费视频一区二区三区| 女同性恋一区二区三区| 亚洲免费观看高清完整版在线| 国产午夜无码视频在线观看| 亚洲а∨天堂久久精品喷水| 久久亚洲天堂| 国产日产欧美a一级在线| 亚洲综合小说图片| av在线播放天堂| 国产成人h网站| 免费看特级毛片| 欧美日韩精品一区二区在线播放| 欧洲毛片在线| 97成人精品视频在线观看| 99re6热只有精品免费观看| 中文字幕在线乱| 激情综合网av| 国产在线观看免费视频软件| 在线这里只有精品| 欧美zzoo| 国产成人精品日本亚洲| 亚洲午夜久久| 日本三级免费观看| 久久青草国产手机看片福利盒子| 国产成人在线观看网站| 欧美精品一区二区三区视频| 丁香花在线影院| 国产精品乱码| 亚洲精选国产| 亚洲av无码一区二区三区网址| 精品美女永久免费视频| 天堂网av2014| 69av成年福利视频| 亚洲资源网你懂的| 国产免费一区二区三区视频| 久久亚洲二区三区| 怡红院av久久久久久久| 国产亚洲精品久久久久久牛牛| 精品视频在线一区二区在线| 五月天亚洲综合情| 久久99国产精品久久99果冻传媒| 中文国语毛片高清视频| 日韩视频国产视频| av中文字幕电影在线看| 欧美激情专区| 蜜臀av性久久久久av蜜臀妖精| 三级黄色录像视频| 制服丝袜一区二区三区| 午夜小视频福利在线观看| 国产精品免费一区二区| 在线视频精品| 一级片久久久久| 91精品午夜视频| 9765激情中文在线| 日韩av免费电影| 国产乱子轮精品视频| 日产欧产va高清| 一区国产精品视频| 国产精品日韩精品在线播放| 男人插女人视频在线观看| 91免费视频大全| 国产一区二区三区在线观看| 欧美国产乱视频| 亚洲宅男网av| 中文字幕55页| 欧美日韩国产精品一区二区不卡中文| 免费黄色在线视频网站| 91性高湖久久久久久久久_久久99| 伊人成年综合电影网| 一级片视频免费看| 欧美一区二区三区在线观看| 国产免费拔擦拔擦8x高清在线人 | 国内精品久久久久久久97牛牛 | 色网站免费在线观看| 成人欧美视频在线| 日韩高清不卡一区| 欧美日韩精品在线观看视频 | 欧美一区二区三区在线播放| 精品亚洲国产成人av制服丝袜| 国产精品成人av久久| 亚洲一级免费视频| 91在线一区| 五月激情婷婷在线| 欧美日韩精品在线| 91黄色在线| 性高潮久久久久久久久| 播五月开心婷婷综合| 国产精品久久久久久免费免熟 | 91污片在线观看|