国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

分析Qt編程習慣 主窗體創建問題

移動開發
分析Qt編程習慣 主窗體創建問題是本文介紹的內容,先來看內容。

本文介紹的是分析Qt編程習慣 主窗體創建問題,要知道,并不是只有初學者才會犯錯。最近發現了一些有意思的問題,值得memo一下。

先來看段代碼:

  1. #include <QApplication> 
  2. #include <QWebView> 
  3. #include <QUrl> 
  4. int main(int argc, char* argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     QWebView* mw = new QWebView;  
  8.     mw->show();  
  9.     mw->load(QUrl("http://www.cuteqt.com/blog"));  
  10.     return a.exec();  

大家看得出這段代碼中的問題嗎?(呵呵,不要告訴我是cuteqt不能訪問哦~)

這段代碼ms十分標準,非常符合筆者平時寫Qt程序書寫main函數的習慣, 孰料想竟然是個錯誤的習慣,而且問題很嚴重哦。 給個提示:在程序退出時會aborted。

如果還沒想出來是什么問題,嘿嘿,沒關系,看了下面的答案你就明白了。

在這段程序里QApplication實例創建在stack上,生命期是main的大括號內,而mw則通過new創建在heap上,在程序退出時才會被析構。 換句話說,mw的生存期長于application的生存期…..這可是Qt編程的大忌, 因為在Qt中所有的Paint Device都必須要在有QApplication實例的情況下創建和使用。

不過如果把這個程序寫出來運行一下,未必會出現我說的aborted的問題,大多數代碼類似的程序都能安全的運行(這也是為什么用了那么多年的Qt從來沒有注意過這個問題,并且養成了我錯誤的編程習慣。)。這里的trick在于application退出時mw已經被關閉,mw中的所有Paint Device一般都不會被訪問到了, 所以這個錯誤隱藏在很深的陰暗角落, 偷偷地嘲笑我們呢!

要想試驗這個問題也很簡單,把load的參數換成本地文件 test.html, 并把下面的內容寫進test.html就能看到拉:

  1. <form> 
  2. <select id="headertest"> 
  3. <option>Item1</option> 
  4. <option>Item2</option> 
  5. <option>Item3</option> 
  6. </select> 
  7. </form>  

這個html里使用了下拉選單。如果你運行程序并點開該選單,之后退出程序你就會看到Aborted錯誤提示,并打印出錯誤信息:“QWidget: Must construct a QApplication before a QPaintDevice”。

既然提出的問題,當然也要給出解決的方案。 有兩種可行的方法避免該錯誤。 一個當然是糾正一下編程習慣,對mw不要用new的方式創建,改在stack上創建,如下代碼:

  1. #include <QApplication> 
  2. #include <QWebView> 
  3. #include <QUrl> 
  4. int main(int arg, char* argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     QWebView mw;  
  8.     mw.show();  
  9.     mw.load(QUrl("http://www.cuteqt.com/blog"));  
  10.     return a.exec();  

另外還可以用Qt提供的API解決此問題,想辦法讓mw在application之前clean up,那就是用WA_DeleteOnClose屬性。該屬性標示窗體會在close時被析構,這樣就保證不會留存在application析構之后了,是個很好的辦法。

代碼如下:

  1. #include <QApplication> 
  2. #include <QWebView> 
  3. #include <QUrl> 
  4. int main(int arg, char* argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     QWebView* mw = new QWebView;  
  8.     mw->show();  
  9.     mw->setAttribute(Qt::WA_DeleteOnClose);  
  10.     mw->load(QUrl("http://www.cuteqt.com/blog"));  
  11.     return a.exec();  

發現問題和解決問題是件很有樂趣的事情,大家不要把時間都浪費在猜測上,要多動手多思考才能進步!

Qt Jambi也存在類似的問題,如果以程序啟動的代碼塊去啟動QApplication,在程序運行過程中,一些資源回收會報出Null指針錯誤,這些錯誤,通過debug,最終都會指向QWidget這個類。當把QApplication啟動的執行程序移出main函數,問題迎刃而解。要多注意細節。

小結:分析Qt編程習慣 主窗體創建問題的內容介紹完了,希望本文對你有所幫助!更多內容請參考編輯推薦。

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

2011-06-23 15:10:39

Qt 窗體

2011-04-13 10:16:41

編程習慣

2011-03-29 12:41:49

編程

2017-09-01 11:01:22

開發編程習慣

2014-03-06 09:43:54

代碼編程習慣

2009-07-24 18:02:46

ASP.NET編程

2015-08-17 10:13:35

ios習慣高效

2011-06-20 16:38:33

Qt QWidget Qt4.5

2020-10-30 07:11:31

C 語言編程

2011-06-28 09:39:31

Qt

2011-06-22 10:12:08

Qt 線程

2020-04-22 10:35:07

編程學習技術

2015-08-20 10:50:33

iOS高效編程習慣

2009-10-14 15:34:29

VB.NET窗體編程模

2011-06-22 09:40:32

QT 模板庫 模板

2009-01-03 14:34:49

ibmdwPHP

2014-09-24 10:18:29

開發者開發習慣

2014-10-13 11:00:14

編程習慣不良開發項目

2011-06-24 15:30:22

QT 皮膚 QSS

2011-06-10 12:44:09

點贊
收藏

51CTO技術棧公眾號

av免费观看大全| 高清中文字幕在线| 亚洲一区二区电影| 亚洲免费一级电影| 国产鲁鲁视频在线观看特色| 一区二区三区蜜桃| 日本天堂免费a| 日韩福利电影在线| 久久综合九色99| 欧美国产日韩二区| 四虎久久免费| 国产97在线亚洲| 91白丝在线| 欧美日韩免费一区二区三区 | 午夜精品一区二区三区在线视频 | 日韩欧美在线视频观看| 人善交video高清| 99久久久精品| 影音先锋在线亚洲| 日本欧美一区二区三区| 久久人人97超碰人人澡爱香蕉| 欧美 日韩 国产精品免费观看| 国产中文字幕91| 亚洲一区 二区 三区| 91超碰rencao97精品| 国产在线日韩| 日本不卡二区高清三区| 日韩精品一区第一页| 欧美精品在线观看一区二区| segui88久久综合9999| 色狠狠色狠狠综合| 视频精品一区二区三区| 一区二区三区资源| 午夜视频国产| 高跟丝袜欧美一区| 搞黄视频在线观看| 日韩免费一区二区三区在线播放| 成人免费在线| 亚洲激情视频网站| 日本a人精品| 茄子视频成人在线| 你懂的一区二区| 日本精品一区| 国产精品一区二区男女羞羞无遮挡 | 国产免费毛卡片| 国产欧美精品国产国产专区| 免费全黄无遮挡裸体毛片| 亚洲综合久久av| 成人不用播放器| 亚洲欧美在线一区二区| 日韩有吗在线观看| 国产精品男人爽免费视频1| 欧美欧美全黄| 国产一二三四区在线观看| 99久久精品国产导航| 黄色资源在线看| 欧美日韩中文字幕精品| 美脚恋feet久草欧美| 国a精品视频大全| 午夜久久久久| 国产xxxx振车| 图片区日韩欧美亚洲| 日本动漫理论片在线观看网站| 日韩在线高清视频| 婷婷综合亚洲| 在线观看污视频| 亚洲在线观看免费视频| 女同视频在线观看| 欧美一区三区三区高中清蜜桃| 亚洲小说区图片区| 亚洲欧洲日产国码无码久久99| 精品免费在线观看| 日韩高清在线| 亚洲综合中文字幕68页| 成人动漫视频在线| 国产69久久| 久久全球大尺度高清视频| 久久精品盗摄| 少妇**av毛片在线看| 亚洲女人天堂网| 99久久视频| 免费在线观看的毛片| 欧美日韩小视频| 国内毛片久久| 日韩欧美精品一区二区| 国产精品国产三级国产普通话蜜臀| 国产乱色在线观看| 国产精品mp4| fc2成人免费人成在线观看播放 | 国产在线观看a视频| 午夜欧美不卡精品aaaaa| 99精品久久| 五月婷婷导航| 色诱女教师一区二区三区| 欧美日一区二区在线观看| 黄色片久久久久| 欧美va亚洲va香蕉在线| 成久久久网站| 99久久激情视频| 亚洲精品久久久久中文字幕二区| 大片网站久久| 国产成人久久婷婷精品流白浆| 88在线观看91蜜桃国自产| 欧美日韩中字| 91欧美视频在线| www.日韩av.com| 国产在线视频不卡二| sese在线视频| 91在线视频精品| 亚洲综合男人的天堂| 亚洲1区在线| 黄色影院一级片| 亚洲石原莉奈一区二区在线观看| 极品日韩av| 天堂网www中文在线| 欧美在线视频网站| 久久精品一区二区三区四区| 色多多在线观看| 日韩理论片在线观看| 日韩欧美成人精品| 久久婷婷蜜乳一本欲蜜臀| 四虎国产精品成人免费4hu| 欧美日本亚洲视频| 久久久亚洲欧洲日产国码αv| 日韩另类视频| 免费极品av一视觉盛宴| 精品精品欲导航| 日韩中文字幕91| bt在线麻豆视频| 欧美日韩免费精品| 欧美一三区三区四区免费在线看| 亚洲精品一区二区在线看| 最新亚洲伊人网| 91久久国产婷婷一区二区| 亚洲高清免费观看| 一区二区三区午夜探花| 国产最新视频在线| 欧美国产视频在线观看| 精品日韩欧美在线| 久久成人av少妇免费| 午夜日韩成人影院| 97视频在线免费| 久久成人国产精品| 国产精品久久久久久久久免费樱桃| h视频久久久| 国产香蕉视频在线观看 | 美女视频免费精品| 免费观看一二区视频网站| 日韩av免费在线播放| 午夜精品久久久久久久久久久| 国产调教一区二区三区| 高清色视频在线观看| 91青青草免费观看| 日韩女优视频免费观看| 捆绑调教一区二区三区| 户外露出一区二区三区| 国产无限制自拍| 欧美极品欧美精品欧美视频| 中文字幕一区二区三中文字幕| 少妇高潮一区二区三区| **毛片在线网站| 91传媒在线免费观看| 欧美一区二区在线看| 国产91对白在线观看九色| 91精品丝袜国产高跟在线| 在线观看免费观看在线91| 久久99国产精品| 亚洲丝袜一区在线| 成人欧美一区二区三区黑人麻豆 | 成人免费网址在线| 成人在线视频福利| 日韩精品一区二区三区中文不卡 | 亚洲福利影院| 91淫黄看大片| 91九色精品视频| 亚洲国产另类 国产精品国产免费| www.欧美日韩| 999精品一区| 超级碰碰久久| 激情视频网址| 视频一区三区| 日本精品视频网站| 欧美一级黄色片| 国产欧美精品一区二区色综合朱莉| 久久国产影院| 亚洲欧美电影| 中文产幕区在线观看| 国内外成人激情免费视频| 欧美高清视频免费观看| 在线视频欧美精品| av一二三不卡影片| 中文在线播放一区二区| 欧美日韩国产v| 最新在线你懂的| 国产精品免费看久久久无码| 国产精品久久久久久久久久久久 | 国产97免费视| 日韩大陆毛片av| 午夜精品久久久久影视| 成人h动漫精品一区二区|