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

金蟲(chóng) (文壇精英)
老漢一枚
|
當(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#陣營(yíng)開(kāi)始動(dòng)搖了。 Qt則晚生于MFC,但開(kāi)源、面向?qū)ο、界面出色,還有跨平臺(tái),使得它后來(lái)居上。 隨著移動(dòng)設(shè)備的市場(chǎng)增長(zhǎng),MFC在WinCE方面,顯得有些笨拙了,連MDI界面都不支持咯。 那么,選擇Qt,還有什么猶豫的呢? |
鐵桿木蟲(chóng) (正式寫(xiě)手)

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

金蟲(chóng) (文壇精英)
老漢一枚
鐵桿木蟲(chóng) (正式寫(xiě)手)

| 感謝分享。 |
| 9 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 085601材料工程找調(diào)劑 +14 | oatmealR 2026-03-29 | 15/750 |
|
|---|---|---|---|---|
|
[考研] 294分080500材料科學(xué)與工程求調(diào)劑 +8 | 柳溪邊 2026-03-26 | 8/400 |
|
|
[考研] 化學(xué)工程085602 305分求調(diào)劑 +22 | RichLi_ 2026-03-25 | 22/1100 |
|
|
[考研] 343求調(diào)劑085601 +3 | 要努力學(xué)習(xí)x 2026-03-29 | 3/150 |
|
|
[考研] 一志愿雙一流機(jī)械285分求調(diào)劑 +4 | 幸運(yùn)的三木 2026-03-29 | 5/250 |
|
|
[考研] 一志愿鄭州大學(xué),080500學(xué)碩,總分317分求調(diào)劑 +8 | 舉個(gè)栗子oi 2026-03-24 | 9/450 |
|
|
[考研] 318一志愿吉林大學(xué)生物與醫(yī)藥 求調(diào)劑 +4 | 篤行致遠(yuǎn). 2026-03-28 | 4/200 |
|
|
[考研] 356求調(diào)劑 +3 | gysy?s?a 2026-03-28 | 3/150 |
|
|
[考研] 本科新能源科學(xué)與工程,一志愿華理能動(dòng)285求調(diào)劑 +3 | AZMK 2026-03-27 | 5/250 |
|
|
[考研] 085405 考的11408求各位老師帶走 +3 | Qiu學(xué)ing 2026-03-28 | 3/150 |
|
|
[考研]
|
18419759900 2026-03-25 | 8/400 |
|
|
[考研] 07化學(xué)280分求調(diào)劑 +10 | 722865 2026-03-23 | 10/500 |
|
|
[考研] 材料292調(diào)劑 +12 | 橘頌思美人 2026-03-23 | 12/600 |
|
|
[考研] 305求調(diào)劑 +5 | 哇盧卡庫(kù) 2026-03-26 | 5/250 |
|
|
[考研] 325求調(diào)劑 +3 | Aoyijiang 2026-03-23 | 3/150 |
|
|
[考研] 0703化學(xué)求調(diào)劑 +3 | 丹青奶蓋 2026-03-26 | 5/250 |
|
|
[考研] 網(wǎng)絡(luò)空間安全0839招調(diào)劑 +4 | w320357296 2026-03-25 | 6/300 |
|
|
[考研] 340求調(diào)劑 +5 | 話梅糖111 2026-03-24 | 5/250 |
|
|
[考研] 277分求調(diào)劑,跨調(diào)材料 +3 | 考研調(diào)劑lxh 2026-03-24 | 3/150 |
|
|
[考研] 一志愿山東大學(xué)藥學(xué)學(xué)碩求調(diào)劑 +3 | 開(kāi)開(kāi)心心沒(méi)煩惱 2026-03-23 | 4/200 |
|