Qt學習前言

奇趣科技(Trolltech)是一傢什麼樣的公司?答:QT開發庫的母公司。程序員

  徹底基於Linux真正成長起來的公司仍然寥寥無幾,而奇趣試圖在開源裏找到一條獨特的發展之路。算法

  David Almstrom,一位頭髮捲曲的瑞典人,奇趣科技(Trolltech)中國區首席表明,再次見到是在他那間中國風極爲濃厚的辦公室。在輕快的背景音樂下,攝影記者爲他擺拍照片, 「拍這樣的照片,我須要音樂作背景,它能夠給我靈感,讓我更加上鏡。」辦公室裏的中國味來自於David爲本身選中的那個中式、刻有細緻古式花紋的文件櫃,和一張簡單的黑桃木色長方形辦公桌。而辦公桌背後的兩個足有兩米高的彩色背板,是他兩個女兒送的繪畫做品,清新而明快。數據庫

  這家總部位於挪威奧斯陸,1994年成立的公司,與其餘軟件開發公司所不一樣的是,兩位創始人Haavard Nord和Eirik Chambe-Eng從一開始就選擇了開源Linux。在上個世紀Linux剛剛萌芽之初,他們快速研發出本身的核心產品Qt和Qtopia兩者都是開發Linux手機和其餘設備應用的可定製的開發環境和用戶界面。從本質上說,Qtopia之於Linux猶如UIQ和Series 60之於Symbian。「1994年,開源的影響很小,但那個時候有不少獨立的黑客和開發者,他們對開源的追崇和狂熱,使規模不大的開源社區異常活躍。這種活躍決定了奇趣的選擇和之後要走的路。」 David說。編程

  截止到今年8月份,奇趣科技服務的客戶數已經達到了5000家,「對一家全球僅232名員工的企業來講,可以服務於5000名用戶,不能不說是一個奇蹟。」 奇趣科技(北京)有限公司副總經理兼奇趣科技專業服務部門亞洲主管Markus Mediger對此非常自豪。如今,奇趣科技核心的Qt和Qtopia已經被應用於數百萬部已上市的Linux手持設備中。網絡

  尋求空白地帶框架

  2005年,奇趣科技在中國成立了中國辦事處,試圖攻入中國移動通訊這塊巨大的市場。函數

  衆所周知,在中國的移動設備通訊領域,廝殺已至關激烈。奇趣科技選擇了爲移動通訊運營商們提供本身的核心平臺,而不是直接面對終端用戶,而運營商們在奇趣科技提供的Qt或者Qtopia上也可以更容易的開發本身的產品設備。工具

  KDAB是來自瑞典的一家公司,「他們但願可以成爲奇趣的合做夥伴,他們認爲Qt不只可以爲他們提供技術能力,還能夠幫助他們開發產品。」 David告訴《互聯網週刊》,「同時,這些客戶也在無形中幫助奇趣提升了其平臺的價值,合做夥伴越多,奇趣做爲平臺公司的實力就越強,咱們所給予的市場價值也就越大。」學習

  爲了與生態鏈各個環節的廠商尋求合做,奇趣最近還在美國設立了一個生態系統部門。「實際上咱們並不對上下游的合做夥伴進行區分,奇趣會時刻關注這一輩子態鏈中,哪些公司是須要奇趣主動去合做的,這對奇趣的成功相當重要,因此只有一個奇趣合做夥伴的管理部門是不夠的。同時,咱們也經過給客戶提供方案的方式進行合做,好比在一個會展中一塊兒展現合做的產品,前不久在北京舉辦的2007 Linux移動通訊展就能夠看到奇趣芯片組的合做夥伴,以及Linux嵌入式的合做夥伴等。」 從2006年末開始,奇趣已經能夠爲合做夥伴提供在線支持。測試

  2006年8月,奇趣科技推出了一部消費者可編程的手機。淺墨綠色外殼,簡約平板設計,這款手機推出後在一家手機水貨網站亮相時,已經有很多的手機迷爲它清新的外形所吸引。奇趣科技確實成功的另闢了蹊徑,這款標價600美圓左右的手機不針對終端用戶,也就是說在通常手機營業廳櫃檯看不到它的身影,它只爲開發商和移動電話運營商提供一個可測試和改進新型移動電話服務的平臺。並且前不久獲得的奇趣科技的官方消息,發售一年有餘,其庫存的Greenphone電話已所有售完。「Greenphone的成功,部分得益於它填補了市場的空白。它提供了一個開放電話平臺,既可用於試驗,也可用於建立新型的應用軟件。這在很大程度上吸引了開發者的參與。」 奇趣科技首席技術官Benoit Schillings說。

  靈巧精靈

  奇趣科技的英文名字—Trolltech,來自一個典故。Troll是挪威森林裏的一種小精靈,儘管表情有些詭異和猙獰,但倒是象徵獨立和個性化的化身,很貼近奇趣公司的核心理念。

  從性情上看,David彷佛很符合做爲奇趣的一份子,他有着Troll所宣揚的個性,好比由於他喜歡中國古典家裝風格,奇趣位於豐聯廣場21層的整個辦公區都掛滿了從潘家園淘來的老北京黑白照片。在這位在中國有着10年工做、生活經驗老外的博客首頁,你能看到兩位瑞典小姑娘身穿中國旗袍的歐版風範,「那是個人兩個女兒,她們都比我更瞭解中國。」 David 不久前和女兒一塊兒去中國劇院看瑞典兒童劇,坐在身旁的小姑娘已經能夠口若懸河給他翻譯舞臺上的小劇情。「其實,咱們在北京的外國同事都習慣在本地社區生活。」因此奇趣科技辦事處的外國員工多少均可以用普通話交流,包括David。而問及是否是已經很瞭解在中國作生意時,David確定的說,「2003年,我在中國有了本身第一筆生意的時候,當時以爲中國的客戶比較天真,他們以爲作一個Linux手機是很容易的,不知道低成本、多功能的手機比生產一部電視機還複雜。如今狀況有了變化,中國用戶有了本身好的工程師,深知將來的挑戰,同時也抱有更加美好的願景。」

  同微軟、IBM這樣的巨頭們相比,全球僅232人的奇趣確定只能是一家小公司,「但在開源圈子裏,做爲第一撥涉入開源的企業之一,奇趣就能夠稱得上是一家有規模的公司,由於徹底基於Linux真正成長起來的公司仍然寥寥無幾。」

  前不久,那個頭戴尖尖精靈帽、右手叼着一條小海魚的Troll,從總部快遞到了奇趣各個辦事處,之後它會陪伴在奇趣全球每一個辦事處的前臺小姐身旁,沒有挪威海盜的勇猛,倒多了一份北歐精靈的奇思妙想


  說到Qt,不能不說到C++,這門偉大的語言。由於其面向對象的編程思想陡峭的學習曲線,一開始學習起來非常吃力。Qt從QT4開始基本封裝了不少C++的工具庫和界面庫,並且支持跨平臺,這是它最大的優點。相比於古老的MFC和使用C#的WPF來講,我更喜歡Qt來進行C++的界面設計,這也是我重新開始拾起Qt學習之路的緣由。

  說完了感覺和學習的緣由,就開始介紹Qt5了。我這裏只作簡單的介紹,重要的仍是在學習過程當中體會Qt的編程邏輯設計思想

  Qt,坦白來講,並不僅是一個界面庫,他是C++編程思想的集大成者。它是獲得完善的C++應用程序框架。使用Qt,在必定程度上你得到的是一個「一站式」、「全方位」的解決方案,STL、string、XML、數據庫、網絡這些零散的功能都包含在Qt中,而且獲得了封裝,一併開發者使用。

  跨平臺GUI一般有三種實現策略,分別是:

  1. API 映射:API 映射是說,界面庫使用同一套 API,將其映射到不一樣的底層平臺上面。大致至關於將不一樣平臺的 API 提取公共部分。好比說,將 Windows 平臺上的按鈕控件Mac OS 上的按鈕組件都取名爲 Button。當你使用 Button 時,若是在 Windows 平臺上,則編譯成按鈕控件;若是在 Mac OS 上,則編譯成按鈕組件。這麼作的好處是,全部組件都是原始平臺自有的,外觀和原平生臺一致;缺點是,編寫庫代碼的時候須要大量工做用於適配不一樣平臺,而且,只能提取相同部分的 API。好比 Mac OS 的文本框自帶拼寫檢測,可是 Windows 上面沒有,則不能提供該功能。這種策略的典型表明是 wxWidgets。這也是一個標準的 C++ 庫,和 Qt 同樣龐大。它的語法看上去和 MFC 相似,有大量的宏。聽說,一個 MFC 程序員能夠很容易的轉換到 wxWidgets 上面來。
  2. API 模擬:前面提到,API 映射會「缺失」不一樣平臺的特定功能,而 API 模擬則是解決這一問題。不一樣平臺的有差別 API,將使用工具庫本身的代碼用於模擬出來。按照前面的例子,Mac OS 上的文本框有拼寫檢測,可是 Windows 的沒有。那麼,工具庫本身提供一個拼寫檢測算法,讓 Windows 的文本框也有相同的功能。API 模擬的典型表明是 wine ——一個 Linux 上面的 Windows 模擬器。它將大部分 Win32 API 在 Linux 上面模擬了出來,讓 Linux 能夠經過 wine 運行 Windows 程序。由此能夠看出,API 模擬最大優勢是,應用程序無需從新編譯,便可運行到特定平臺上。另一個例子是微軟提供的 DirectX,這個開發庫將屏蔽掉不一樣顯卡硬件所提供的具體功能。使用這個庫,你無需擔憂硬件之間的差別,若是有的顯卡沒有提供該種功能,SDK 會使用軟件的方式加以實現。
  3. GUI 模擬:任何平臺都提供了圖形繪製函數,例如畫點、畫線、畫面等。有些工具庫利用這些基本函數,再不一樣繪製出本身的組件,這就是 GUI 模擬。GUI 模擬的工做量無疑是很大的,由於須要使用最基本的繪圖函數將全部組件畫出來;而且這種繪製很難保證和原生組件如出一轍。可是,這一代價帶來的優點是,能夠很方便的修改組件的外觀——只要修改組件繪製函數便可。不少跨平臺的 GUI 庫都是使用的這種策略,例如 gtk+(這是一個 C 語言的圖形界面庫。使用 C 語言很優雅地實現了面向對象程序設計。不過,這也一樣帶來了一個問題——使用大量的類型轉換的宏來模擬多態,而且它的函數名通常都比較長,使用下劃線分割單詞,看上去和 Linux 一模一樣。gtk+ 並非模擬的原生界面,而有它本身的風格,因此有時候就會和操做系統的界面格格不入。)Swing 以及咱們的 Qt。

  Qt 和 wxWidgets 同樣,也是一個標準的 C++ 庫。可是它的語法相似於 Java 的 Swing,十分清晰,並且使用信號槽(signal/slot)機制,讓程序看起來很明白——這也是不少人優先選擇 Qt 的一個很重要的緣由。不過,所謂「成也蕭何,敗也蕭何」。這種機制雖然很清楚,可是它所帶來的後果是你須要使用 Qt 的 moc 對程序進行預處理,纔可以再使用標準的 make 或者 nmake 進行正常的編譯,而且信號槽的調用要比普通的函數調用慢大約一個數量級(Qt 4 文檔中說明該數據,但 Qt 5 還沒有有官方說明)。Qt 的界面也不是原生風格的,儘管 Qt 使用 style 機制十分巧妙地模擬了原生界面。另外值得一提的是,Qt 不只僅可以運行在桌面環境中,還能夠運行在嵌入式平臺以及手機平臺。

  Qt 初版於 1991 年由 Trolltech (奇趣科技)發佈。後來在 2008 年,Nokia 斥資 1.5 億美圓收購 TrollTech,將 Qt 應用於 Symbian(塞班) 程序開發。2012 年 8 月 9 日,Nokia 將 Qt 以 400 萬歐元的價格出售給 Digia。

  伴隨着 Qt,一直有兩種受權協議:商業受權以及開源受權。在 Qt 的早期版本,商業受權包含一些開源受權不提供的組件,可是在近期版本則不存在這個問題。以往人們對 Qt 的開源受權多有詬病。早期版本的 Qt 使用與 GPL 不兼容的協議受權,這直接致使了 KDE 與 GNOME 的戰爭(因爲 Linux 使用 GPL 協議發佈,GPL 協議具備傳染性,做爲 Linux 桌面環境的 KDE 倒是基於與 GPL 不兼容的 Qt 開發,這就不遵照 GPL 協議)。不過,如今 Qt 的開源版本使用的是 GPLv3 以及 LGPL 協議。這意味着,你能夠將 Qt 做爲一個庫鏈接到一個閉源軟件裏面。能夠說,Qt 協議的爭議已經不存在了。

相關文章
相關標籤/搜索