| 5 | 1/1 | 返回列表 |
| 查看: 2324 | 回復(fù): 8 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | |||
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的部分。本文討論的是后一種需求。所幸的是,細心的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的程序運行機制。 重載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部分一點點替換掉了。 任重而道遠! [ 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ā)的程序,“永遠”都要背著.Net Framework 3.5,如影隨形,尾大不掉,直到永遠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》,機械工業(yè)出版社。這本書有些“另類”,前半部分,是對MFC的分析和評價,后半部分,則是關(guān)于C#和.Net的。如果沒有多年的實踐經(jīng)驗,讀起來比較困難(俺讀起來很舒服,這是必須的)。不過,第10章,是對跨平臺的一些介紹和討論,值得瀏覽瀏覽。 [ Last edited by yalefield on 2011-1-31 at 14:13 ] |
鐵桿木蟲 (正式寫手)

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 求調(diào)劑 +4 | QiMing7 2026-03-25 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 考研調(diào)劑 +7 | 小蠟新筆 2026-03-29 | 7/350 |
|
|
[考研] 070305高分子化學(xué)與物理 304分求調(diào)劑 +12 | c297914 2026-03-28 | 12/600 |
|
|
[考研] 22408 359分調(diào)劑 +4 | Qshers 2026-03-27 | 6/300 |
|
|
[考研] 求調(diào)劑一志愿武漢理工大學(xué)材料工程(085601) +7 | WW.' 2026-03-23 | 9/450 |
|
|
[考研] 求收留 +5 | 1943443204 2026-03-28 | 5/250 |
|
|
[考研] 求調(diào)劑 +7 | 爭取九點睡 2026-03-28 | 8/400 |
|
|
[考研] 332求調(diào)劑 +4 | @MZB382400 2026-03-28 | 4/200 |
|
|
[考研] 一志愿華理,數(shù)一英一285求A區(qū)調(diào)劑 +8 | AZMK 2026-03-25 | 12/600 |
|
|
[考研] 本科新能源科學(xué)與工程,一志愿華理能動285求調(diào)劑 +3 | AZMK 2026-03-27 | 5/250 |
|
|
[考研]
|
y7czhao 2026-03-26 | 10/500 |
|
|
[考研] 一志愿南京航空航天大學(xué)材料學(xué)碩求調(diào)劑 +3 | @taotao 2026-03-28 | 3/150 |
|
|
[考研] 0856調(diào)劑 +5 | 求求讓我有書讀?/a> 2026-03-26 | 6/300 |
|
|
[考研] 08開頭275求調(diào)劑 +4 | 拉誰不重要 2026-03-26 | 4/200 |
|
|
[考研]
|
鐘llll 2026-03-26 | 4/200 |
|
|
[考研] 309求調(diào)劑 +4 | gajsj 2026-03-25 | 5/250 |
|
|
[考研] 290分調(diào)劑求助 +3 | 吉祥止止陳 2026-03-25 | 3/150 |
|
|
[考研] 318求調(diào)劑 +3 | plum李子 2026-03-23 | 3/150 |
|
|
[考研] 一志愿吉大化學(xué)322求調(diào)劑 +4 | 17501029541 2026-03-23 | 6/300 |
|
|
[論文投稿] 急發(fā)核心期刊論文 +3 | 賢達問津 2026-03-23 | 5/250 |
|