| 3 | 1/1 | 返回列表 |
| 查看: 1470 | 回復(fù): 2 | ||||
yalefield金蟲 (文壇精英)
老漢一枚
|
[交流]
【轉(zhuǎn)帖】徹底超越MFC-->諾基亞的開源GUI庫:Qt 已有2人參與
|
|
http://www.cnbeta.com/articles/111246.htm Visual Studio 2003/2005/2008下開發(fā)Windows圖形界面程序,程序員一直做著抉擇:選擇.net平臺,則意味著需要XP用戶安裝.net Framework, 而且自己不能手工控制某些代碼的優(yōu)化;選擇原生C++/MFC平臺,則意味著需要編寫繁瑣的代碼(VS2008甚至裁掉了基于MFC的GUI Designer,所有MFC GUI代碼,除IDE內(nèi)置的可憐的框架外,必須手工產(chǎn)生)。 自從Visual Studio 2002發(fā)布以來,微軟一直在C++平臺推C++向.NET平臺的轉(zhuǎn)換,先后推出了Managed C++和其升級版本C++/CLI,而對原生運(yùn)行的C++一直冷淡,除了更加符合標(biāo)準(zhǔn)之外,幾乎沒有新的庫加入。而同時,開源陣營的C++平臺迅速發(fā)展。其一是GCC4大幅度提升了編譯優(yōu)化,二進(jìn)制碼質(zhì)量已經(jīng)超過了原生編譯的Visual C++;其二是一系列開源跨平臺的GUI庫(例如Qt、WxWidgets、GTK等)的蓬勃發(fā)展,已經(jīng)達(dá)到和超過了一代巔峰Visual C++ 6.0(MFC庫)的水平了。 下面筆者就向大家簡要介紹Qt這個庫。 筆者個人認(rèn)為,在Qt、WxWidgets、GTK三個開源C/C++庫中,Qt的設(shè)計(jì)思路、IDE支持、代碼執(zhí)行速度都達(dá)到了較好的(至少,能和微軟的Visual C++/CLI媲美)的水平。(GTK是基于C的,也是面向?qū)ο箫L(fēng)格,比較適合C開發(fā)者。) 歷史 Qt本來是trolltech公司設(shè)計(jì)的一個跨平臺庫。2008年trolltech被諾基亞收購,Qt就成了諾基亞的官方GUI界面庫。 包含的模塊(摘自維基百科) * QtCore—QtCore模塊是所有基于Qt的應(yīng)用程序的基礎(chǔ),提供信號與槽的對象間通信機(jī)制、IO、事件和對象處理、多線程 * QtGui—包含了開發(fā)圖形用戶界面應(yīng)用程序所需的功能。使用其支持的各個平臺的本地圖形API。支持反鋸齒、向量形變。支持ARGB頂層 widget * QtMultimedia * QtNetwork—提供了網(wǎng)絡(luò)程序設(shè)計(jì)功能。支持通用協(xié)議,如HTTP、FTP和DNS,包括對異步HTTP 1.1的支持。與較低層的TCP/IP和UDP協(xié)議,如QTcpSocket、QTcpServer和QUdpSocket * QtOpenGL—提供在應(yīng)用程序中使用OpenGL和OpenGL ES加入3D圖形。在Windows平臺上亦支持Direct3D * QtOpenVG * QtScript— 包含完全集成的ECMA標(biāo)準(zhǔn)腳本引擎。提供信號與槽機(jī)制簡化對象間通信和QtScript調(diào)試器。 * QtScriptTools—額外的Qt Script組件 * QtSql—將數(shù)據(jù)庫集成至應(yīng)用程序。支持所有主要的數(shù)據(jù)庫驅(qū)動包括ODBC、MySQL、PSQL、SQLite、 ibase、Oracle、Sybase、DB2。 * QtSvg—支持SVG格式 * QtWebKit—集成WebKit,提供了HTML瀏覽器引擎,便于在本地應(yīng)用程序中嵌入網(wǎng)絡(luò)內(nèi)容和服務(wù)。 * QtXml—提供了XML文檔的閱讀器和編寫器、支持SAX和DOM。 * QtXmlPatternsl—提供了XQuery和XPath引擎支持。 * Phonon—集成Phonon,支持跨平臺應(yīng)用程序播放音頻和視頻內(nèi)容。 * Qt3Support—模塊提供兼容Qt 3.х.х版本的程序庫 從上面可以看出,Qt可以取代自Visual C++ 6.0中就開始支持的MFC、Winsock、MSHTML、MSXML、MSDXM(以及后來的Windows Media Player控件)、ADO數(shù)據(jù)訪問等模塊。 開發(fā)環(huán)境IDE 開發(fā)環(huán)境是程序員最為關(guān)注的,Windows平臺微軟VC++、VB、C#系列語言的成功,就是因?yàn)橛辛藦?qiáng)大的Visual Studio開發(fā)環(huán)境. 當(dāng)年Visual Studio 6.0跟MFC就提供了類似的事件-處理函數(shù)鉤連工具,如今開源軟件也提供了,并且更為強(qiáng)大易用。 除了Qt Creator,Qt的窗體設(shè)計(jì)器(Qt Designer)還可以作為插件,在別的IDE下使用。例如,可以插入Netbeans、Visual Studio和Eclipse。至今,插件仍然有一定的問題,例如Socket/Slot關(guān)聯(lián)器,在ubuntu 9.10 + Netbeans 6.8的搭配下,Signal/Slot關(guān)聯(lián)器無法使用,而在Windows 7+Visual Studio 2008 SP1下正常。 為了開發(fā)多語言程序,Qt提供了Qt Linguist,可以方便地編輯多語言資源。 內(nèi)存管理 可能是出于對嵌入式應(yīng)用的性能考慮,現(xiàn)在版本的Qt并沒有集成功能非常強(qiáng)大的(類似于Java或.net的)垃圾收集器,但是也不用在內(nèi)存管理上太過費(fèi)心。Qt中大部分widget都從QObject類繼承而來,而QObject有一個上級對象的屬性;當(dāng)上級對象(如窗體中按鈕的上級對象是窗體)退出內(nèi)存,Qt內(nèi)置的機(jī)制會將所有下級對象一起銷毀。如果在上級對象未退出內(nèi)存的時候需要刪除下級對象以釋放內(nèi)存,則可以調(diào)用freeLater( )函數(shù)來釋放。 當(dāng)然,像傳統(tǒng)的C++一樣,Qt不解決野指針陷阱,對象刪除后的指針需由程序員自己消滅或者另賦他址。相比于MFC的內(nèi)存管理,Qt的內(nèi)存管理已經(jīng)相當(dāng)人性化,期待下一個版本加入內(nèi)置的垃圾收集器,讓程序員可以選擇由垃圾收集器收集內(nèi)存空間。 跨平臺開發(fā) Qt開發(fā)的程序都是跨平臺的,可以在Windows、FreeBSD、Linux(X11)、MacOSX四大主流桌面平臺上運(yùn)行,還支持 Symbian、Embedded Linux、WinCE、Maemo四種嵌入式平臺,而OpenSolaris、iPhone OS、Android、Amazon Kindle平臺的開發(fā)也正在進(jìn)行中。 Qt Creator本身可以在Windows、Linux(X11)、MacOSX上運(yùn)行。 授權(quán) Qt主要以三種協(xié)議發(fā)布:GPL、LGPL和Commercial。三種協(xié)議的代碼相同,只是協(xié)議不同而已。GPL就不用說了,LGPL協(xié)議允許基于Qt 開發(fā)開源或閉源/商業(yè)軟件;Commercial協(xié)議需要花錢從Nokia購買,每開發(fā)者授權(quán)價格在2000美元之下,附加一年的技術(shù)支持;只有在需要對 Qt本身進(jìn)行修改,并且修改的部分不能開放源代碼的時候,才有必要采用Commercial協(xié)議。因此個人和小企業(yè)開發(fā)者使用Qt絕大部分情況是不要錢的。 |
信息 |
銅蟲 (初入文壇)

![]() |
| 3 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿南開大學(xué)0710生物學(xué)359求調(diào)劑 +3 | 兔兔兔111223314 2026-03-29 | 3/150 |
|
|---|---|---|---|---|
|
[考研]
|
nnnnnnn5 2026-03-25 | 11/550 |
|
|
[考研] 【求調(diào)劑】085601材料工程專碩 | 總分272 | +7 | 腳滑的守法公民 2026-03-27 | 7/350 |
|
|
[考研] 291求調(diào)劑 +7 | Y-cap 2026-03-29 | 8/400 |
|
|
[考研] 322求調(diào)劑:一志愿湖南大學(xué) 材料與化工(085600),已過六級。 +4 | XX小鄧 2026-03-29 | 4/200 |
|
|
[考研] 070300化學(xué)354求調(diào)劑 +6 | 101次希望 2026-03-28 | 6/300 |
|
|
[考研] 求調(diào)劑,一志愿 南京航空航天大學(xué) ,080500材料科學(xué)與工程學(xué)碩,總分289分 +7 | @taotao 2026-03-29 | 7/350 |
|
|
[考研] 0856材料化工調(diào)劑 總分330 +14 | zhubinhao 2026-03-27 | 14/700 |
|
|
[考研] 330分求調(diào)劑 +5 | qzenlc 2026-03-29 | 5/250 |
|
|
[考研] 一志愿211 初試270分 求調(diào)劑 +8 | 谷雨上岸 2026-03-23 | 9/450 |
|
|
[考研] 材料求調(diào)劑 一志愿哈工大總分298分,前三科223分 +5 | dongfang59 2026-03-27 | 5/250 |
|
|
[考研] 考研調(diào)劑 +4 | Sanmu-124 2026-03-26 | 4/200 |
|
|
[考研] 298調(diào)劑 +3 | jiyingjie123 2026-03-27 | 3/150 |
|
|
[考研] 351求調(diào)劑 +4 | 麥克阿磊 2026-03-24 | 4/200 |
|
|
[考研] 調(diào)劑求收留 +7 | 果然有我 2026-03-26 | 7/350 |
|
|
[考研] 0703化學(xué)求調(diào)劑 +3 | 丹青奶蓋 2026-03-26 | 5/250 |
|
|
[考研] 332求調(diào)劑 +6 | 032500 2026-03-25 | 6/300 |
|
|
[考研] 考研一志愿蘇州大學(xué)初始315(英一)求調(diào)劑 +3 | sbdksD 2026-03-24 | 4/200 |
|
|
[考研] 化工專碩求調(diào)劑 +3 | question挽風(fēng) 2026-03-24 | 3/150 |
|
|
[考研] 一志愿國科過程所081700,274求調(diào)劑 +3 | 三水研0水立方 2026-03-23 | 3/150 |
|