| 9 | 1/1 | 返回列表 |
| 查看: 2323 | 回復(fù): 8 | |||
yalefield金蟲 (文壇精英)
老漢一枚
|
[交流]
【轉(zhuǎn)帖】MFC與Qt混合編程---“官方文檔”的縮寫 已有3人參與
|
|
作者:程序開發(fā)之家 http://www.cngeng.info/qt%B1%E0%B3%CC/2044.html 現(xiàn)在,Windows下的大多數(shù)程序都是使用mfc開發(fā)的,由于眾多產(chǎn)品想移植到非windows的操作系統(tǒng)上繼續(xù)使用,qt由于自身“一次編寫,到處編譯 ”的特性恰恰滿足了這種需求。所以,怎么從mfc程序遷移到qt上來是很多公司需要考慮的問題。至于從qt遷移到mfc這種需求應(yīng)該是不會出現(xiàn)的 ,mfc1.0 1992年就發(fā)布,qt94年才開始動工呢。怎么說都是mfc歷史悠久,地大物博... 選擇了qt作為mfc的替代品,那就得考慮是新建一個qt工程重新寫一遍還是能在原來的mfc工程里直接使用qt 組件逐步替換掉mfc的部分。本文討論的是后一種需求。所幸的是,細(xì)心的qt官方也考慮到了這一點。官方提供了 Qt/MFC Migration Framework 來實現(xiàn)在mfc工程里混用qt的組件?梢詮倪@個頁面找到相關(guān)的下載:http://doc.trolltech.com/solutions/qtwinmigrate/winmigrate-walkthrough.html 這個framework比較簡單就包括幾個類QWinWidget,QMfcApp等。 關(guān)于具體怎么做,該頁面上也能找到很多實例。翻譯成中文大致有這么幾點: 首先,要想使用一個QtGui部件,比如QPushButton, QWidget之類的,必須有一個QApplication 對象存在。在創(chuàng)建一個QPushButton時,代碼會檢測是否有這么一個QApplication對象存在,否則程序會crash掉。所以需要創(chuàng)建一個 QApplication對象: 創(chuàng)建了QMfcApp對象,那些QWidget們就有指望了,因為它們的事件需要QApplication 來管理分配。所以,接著就要用QMfcApp對象來接管CWinApp的程序運行機(jī)制。 重載CWinApp的Run函數(shù),調(diào)用QMfcApp::run(this); 這里用到了上面創(chuàng)建的QMfcApp對象來同時接管QWidget的 event和MFC的message loop. 代碼如下: 現(xiàn)在QApplication對象已經(jīng)有了,new 一個 QPushButton上去,程序也不會報錯了。但是,如何讓這個QPushButton 能顯示在 MFC的窗口類里面呢? 因為構(gòu)造QPushButton的時候,父類只能接受一個QWidget,而不能不接受一個父類窗口的windows handle。 QWinWidget登場了! 來看一下QWinWidget的構(gòu)造函數(shù): QWinWidget ( HWND hParentWnd, QObject * parent = 0, Qt::WFlags f = 0 ); 啥也不用說了,代碼如下: 懶得翻譯了,直接貼一段吧 Now we can create the QWinWidget instance with this CWnd instance as a parent window, and use that instance as a parent to the QWidgets we want to use to create the user interface. Since QWinWidget is a proper QWidget it can be laid out, and we move the Qt GUI to the upper left corner of the MFC child and show() the user interface immediately. 最后別忘了,這個widget還是要干掉的。widget一干掉,下面那些子子孫孫widget全部干掉,qt就這么霸道! 就簡單講到這里。我們已經(jīng)知道如何讓mfc代碼和qt代碼放在一起編譯通過了,剩下的工作就是把mfc部分一點點替換掉了。 任重而道遠(yuǎn)! [ Last edited by yalefield on 2011-1-31 at 00:02 ] |
鐵桿木蟲 (正式寫手)

金蟲 (文壇精英)
老漢一枚
|
當(dāng)Java出現(xiàn)以后,程序員大約分為C++和Java兩大派。 別跟俺提Perl, PHP,那只是涼菜,下酒的。 當(dāng).Net出現(xiàn)以后,C++分裂了,有的加入了C#和Visual Basic,有的則保持本色。 可是,隨著Visual Studio 2010以及.Net Framework 4.0的出現(xiàn),尤其是.Net Framework 4.0與3.5版不兼容,使得C#陣營開始動搖了。 Qt則晚生于MFC,但開源、面向?qū)ο、界面出色,還有跨平臺,使得它后來居上。 隨著移動設(shè)備的市場增長,MFC在WinCE方面,顯得有些笨拙了,連MDI界面都不支持咯。 那么,選擇Qt,還有什么猶豫的呢? |
鐵桿木蟲 (正式寫手)

金蟲 (文壇精英)
老漢一枚
|
先說.Net Framework。 用VC++ 2008,只能選擇.Net Framework 3.5和它之前的版本。 而用VC++ 2010,則只能用.Net Framework 4.0。 更為可怕的,是.Net Framework 4.0與.Net Framework 3.5完全不兼容。也就是說,無法把.Net Framework 3.5的程序代碼“自動升級”到.Net Framework 4.0上。 換個角度。 如果您確定了用.Net Framework 3.5,那么您的程序可以運行在Win XP, Vista, 7系統(tǒng),這個沒有問題。 如果您確定了用.Net Framework 4.0,那么您的程序也可以運行在Win XP, Vista, 7系統(tǒng)下。 只是,你用.Net Framework 3.5開發(fā)的程序,“永遠(yuǎn)”都要背著.Net Framework 3.5,如影隨形,尾大不掉,直到永遠(yuǎn)OR微軟倒閉OR改寫代碼。 但是,C#和Java這類語言,都屬于“托管”性質(zhì),也就是說,程序代碼其實并不是運行在操作系統(tǒng)上,而是運行在一個托管環(huán)境中,如Java,運行在JVM提供的環(huán)境下,C#則運行在.Net Framework提供的環(huán)境下。 JVM的宣傳,是跨平臺,可是多年來的實踐證明,“一次編寫、到處運行”的夢想,與“一次編寫、到處出錯、隨時調(diào)試”的現(xiàn)實,差距的確有。 .Net Framework的夢想,其實也是跨平臺,不過,它只是個幌子,實際起作用的,是MSIL這個中間語言。 關(guān)于這方面的比較與介紹,請參考任哲等編寫的《Windows程序設(shè)計基礎(chǔ)----MFC與.NET》,機(jī)械工業(yè)出版社。這本書有些“另類”,前半部分,是對MFC的分析和評價,后半部分,則是關(guān)于C#和.Net的。如果沒有多年的實踐經(jīng)驗,讀起來比較困難(俺讀起來很舒服,這是必須的)。不過,第10章,是對跨平臺的一些介紹和討論,值得瀏覽瀏覽。 [ Last edited by yalefield on 2011-1-31 at 14:13 ] |
鐵桿木蟲 (正式寫手)

金蟲 (文壇精英)
老漢一枚
鐵桿木蟲 (正式寫手)

| 感謝分享。 |
| 9 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 南京大學(xué)化學(xué)調(diào)劑 +9 | 景隨風(fēng) 2026-03-29 | 14/700 |
|
|---|---|---|---|---|
|
[考研] 總分293求調(diào)劑 +8 | 加一一九 2026-03-25 | 11/550 |
|
|
[考研] 299求調(diào)劑 +10 | 15188958825 2026-03-25 | 10/500 |
|
|
[基金申請] 面上5B能上會嗎? +4 | redcom 2026-03-29 | 4/200 |
|
|
[考研] 環(huán)境工程 085701,267求調(diào)劑 +6 | minht 2026-03-29 | 6/300 |
|
|
[考研] 289求調(diào)劑 +13 | 新時代材料 2026-03-27 | 13/650 |
|
|
[考研] 332求調(diào)劑 +4 | @MZB382400 2026-03-28 | 4/200 |
|
|
[考研] 一志愿華理,數(shù)一英一285求A區(qū)調(diào)劑 +8 | AZMK 2026-03-25 | 12/600 |
|
|
[考研] 0703一志愿9,初試成績:338,四六級已過,有科研經(jīng)歷,求調(diào)劑! +4 | Zuhui0306 2026-03-25 | 4/200 |
|
|
[考研] 材料求調(diào)劑 一志愿哈工大總分298分,前三科223分 +5 | dongfang59 2026-03-27 | 5/250 |
|
|
[考研] 考研調(diào)劑 +4 | Sanmu-124 2026-03-26 | 4/200 |
|
|
[考研] 一志愿南師大0703化學(xué) 275求調(diào)劑 +4 | Ripcord上岸 2026-03-27 | 4/200 |
|
|
[考研] 考研調(diào)劑 +10 | 呼呼?~+123456 2026-03-24 | 10/500 |
|
|
[考研] 341求調(diào)劑 +7 | 青檸檬1 2026-03-26 | 7/350 |
|
|
[考研] 325求調(diào)劑 +3 | Aoyijiang 2026-03-23 | 3/150 |
|
|
[考研] 各位老師您好:本人初試372分 +5 | jj涌77 2026-03-25 | 6/300 |
|
|
[考研] 生物學(xué)學(xué)碩求調(diào)劑 +7 | 小羊睡著了? 2026-03-23 | 10/500 |
|
|
[考研] 一志愿武理085500機(jī)械專業(yè)總分300求調(diào)劑 +3 | an10101 2026-03-24 | 7/350 |
|
|
[考研] 調(diào)劑 +4 | 13853210211 2026-03-24 | 4/200 |
|
|
[考研] 一志愿山東大學(xué)藥學(xué)學(xué)碩求調(diào)劑 +3 | 開開心心沒煩惱 2026-03-23 | 4/200 |
|