2010年11月4日 星期四

Nokia Qt Hands-on Course 研習課程心得

超級潮的penk講師
主管指派我去參加10/21這一天 Nokia Qt 的研習課程,地點是在很遙遠的宜蘭大學。我之前從來沒去過這間大學,查了一下原來是在我最不熟的宜蘭市,這樣晚上要怎麼去礁溪泡溫泉或去羅東夜市吃小吃呢?出發前又在猶豫到底該開車去還是搭車去?眼看著陰雨綿綿的天氣,這場雨不知嚇到何時方休,不管了,還是坐火車去吧!

後來事實證明我果然有先見之明,10/21也是梅姬颱風來台的日子,我恰好跑到宜蘭去見證了這百年罕見的水災,沒開車去是對的,車子開過去鐵定是泡水的,況且我買的又不是牛頭牌的「神車」(神舟?)可以當做水陸兩棲的潛水艇(見證神車的影片可以看這裡或在Youtube搜尋「凡那比颱風~淹水記」)。

略微遲到的到了教室後,發現人還挺多的,我想大部分是宜蘭大學資工系所的學生吧(畢竟是他們主辦的),就當主講的老師要開始開場白時,我向後一瞄,我的主管赫然出現了!!這可嚇壞我了,還好我旁邊的位置已經坐滿了,他就只能坐在比較偏後面的位置。

NOKIA在開場白的時候說到他們是芬蘭公司,北歐人比較隨性,天性浪漫自由(freestyle?),所以在他們自家的Symbian OS上一直沒有一套很完善的開發工具,一直到Nokia併購Trolltech後有了Qt......(我心裡OS:這是啥藉口阿?也難怪Qt還是這麼難裝...當初裝Qt_SDK再加上Nokia_Qt_SDK這兩套一起裝可折騰死我了...)

而他們這次請的是一家叫MOVIAL的芬蘭公司的Penk Chen(陳品勳)講師來做NOKIA的開發工具Qt Development Kit的教學,他可長得超性格的,穿一襲黑衣服又綁個大馬尾,猛一看我真的以為莊圓師父也來教Qt了,我一直很期待他講到一半忽然拿出小劍出來跳一段天帝Qt劍頓戰幻舞! XD

不過很可惜的他沒有跳頓幻舞,但他說話還是蠻幽默的,很多話都一直戳中我的笑點,只不過台下不是學生就是阿宅工程師,反應都很冷漠(我想主講人若換成隨便一位NOKIA的展場ShowGirl台下應該就會超熱烈的吧,哈哈)。然後花了整整一個早上竟然只是在安裝開發環境(VirtualBox+Ubuntu+Qt)和設定,這不是在來之前就要裝好的東西嗎?而且Qt SDK本來就有windows版的為啥要這麼麻煩呀?好吧!只好告訴自己這一切都是為了Meego,因為據說SDK for Meego只有在Linux的環境下才有。(結果第二天才是Meego的課程,根本沒上到阿阿阿~~)

吃了便當到了下午,好棒阿!終於要開始「hello world」了。我們一字一字的寫好main.cpp,再寫好hello.pro,再打qmake hello.pro編譯project檔,最後再打make去build整個project,終於跳出了裡頭有"hello world" label的視窗了。我發現老師這時眼角泛著淚光,應該是覺得超感動的,想不到這平常像吃飯喝水一樣簡單的東西,到現場要帶領大家實做到這一步竟然要花這麼大的力氣阿!(他說賈柏斯他們都是「Never Live Demo」,寧可都播放預錄好的影片,因為你永遠不知道現場會出什麼狀況,不過penk他現在是「Live Coding」境界可就更高了!哈哈!)

然後,終於,有獎徵答的時候到了,他出了一題小習題,題目就如下面的圖片所示,要做個Slider bar和SpinBox的UI,兩者的值都要可以改變,但彼此的顯示的值都要是同步連動的,前三名做出來的會贈送NOKIA牌的「超大超粗」原子筆 (超大超粗老師有特別加強語氣 XD)。


這很明顯就是兩個connect彼此的SINGAL和SLOT可以搞定的事情,而且提示通通在投影片上了就是valueChanged()setValue(),老實說真的要加的code差不多四五行而已,一下就可以寫完了,程式碼大概像這樣:

(重點就是加了30~35這幾行,還有40、41行記得把它add到layout裡面)

我其實沒有很想要那隻筆也沒有想舉手的,但是我瞬間轉念一想:這麼簡單的問題如果不舉手,主管會不會以為我不會阿?!那他會不會以為我平常上班都在混阿?那我豈不是黑掉了?那我今年的考績豈不是糗了?那我的人生豈不是完蛋了?我越想越深就越覺得恐怖,我發現我的右手不爭氣的在顫抖中舉起來了!!!


於是,我得到了一支黑色的「NOKIA牌超大超粗」原子筆。


後來又教了多國語系的製作,這部份我倒覺得很新奇有趣,也是我此行最大的收穫,因為我一直不知道Qt裡面的「Linguist」是幹什麼用的,原來他就是「Qt語言家」讓你方便設計多國語言的工具,只要在程式碼裡面的QString字串都用tr()包起來,就可以在這裡頭找得到。作法步驟大致如下:

1. 在你的程式碼把所有用到的字串都用tr()包起來
2. 在hello.pro內加上一行「TRANSLATIONS += hello_zh.ts」
3. 輸入指令「lupdate hello.pro」用lupdate 來產生hello_zh.ts檔 (lupdate應該在Qt\bin\裡面找的到)
4. 輸入指令「linguist hello_zh.ts」用linguist 來開啟hello_zh.ts編輯,你會發現tr()包的字串都找到了,就在此編輯你要的文字(這裡就不多說了)
5. 輸入指令「lrelease hello.pro」用lrelease 來產生hello_zh.qm檔 (lrelease 應該也在Qt\bin\裡面)
6. 如果.qm檔已經順利產出,其實已經大功告成了,接下來只是在程式內吃的語系設定,就像這樣:(其中 QLocale::system().name()就是自動抓系統設定的語系來決定要用哪一套語系檔)


課程的最後,又出了一個小題目來當做ending,這次第一個答對要送的是本次課程中的最大獎,「NOKIA最新N8戰鬥超宅藍色POLO衫一件」!哇!本日最大獎耶!老師說這上面有OVI、還有杜比、還有HDMI等狗皮貼紙,穿出去可以說「我的度量有1080P這麼大」(很冷,乾脆說我的X頭有12百萬像素,還是蔡司鏡頭的好了...)

題目是要做一個Yes/No確認關閉視窗的對話方塊,這題目乍看起來好像有難度,但其實還是三四行解決的東西。原因在於Qt Creator本身就是一個很強大的GUI編輯器,類似這種Dialog都有一個個寫好的Class,只要套用就好了。於是我飛快的用了QMessageBox寫下了下面的code:


然後害羞的我就開始花了數分鐘,猶豫到底要不要舉手。不過想要超宅藍色POLO衫的慾望很快的克服了我內心的恐懼,我還是舉起了手請老師來看......喔耶!PASS了!POLO衫入手!也終於結束了一天的課程。此時梅姬颱風的狂風暴雨不停狂洩而下,宜蘭大學的操場早已是汪洋一片,學生也早就在三點就停課回家了,只剩我們這群不知所措的阿宅們還在學校裡奮戰。

今日戰利品

由於這是兩天的課程我們是早有安排住宿的,我和同事們到預定的旅館,到了旅館後不久就接獲由於颱風重創宜蘭,明天課程取消的通知。我一個人怔怔的望著那件超宅藍色POLO衫,不知道自己為什麼剛剛那麼想要,開始思考我到底敢不敢穿這種衣服出門的哲學問題來了......(完)

這麼宅的衣服,你會怎麼穿?XD


補充說明:N8是NOKIA今年力挽狂瀾的最新代表作手機,具有超多智慧型手機的功能,其中最讓我羨慕的就是下降頭」的功能!可以讓你喜歡的人情不自禁的愛上你。不要以為我在唬爛,不相信的話可以看下面這隻N8的泰國廣告......XD

1 則留言:

寫在參加309反核遊行之前

圖片出自:日本藝術家 奈良美智(Yoshitomo Nara) 的經典反核作品 一開始,先來聽首好聽的【 棉花糖 katncandix2 - 深黑的河 】 吧! 我一直以來都犯個毛病,就是有時會過於理性,相信「證據會說話」,換句話說就是愛當「認真魔人」,...