2007年5月21日 星期一

Qt 日記之一

約在兩年前我就想學 Qt! 理由有三:
1. 我想, 每天在 Driver 混, 都是用命令列, 總要學個 UI, 以後自己可以寫些小 tool 玩玩!
2. 在 GTK 和 Qt 中, 我選擇了 Qt! 理由很簡單. 其實我並不知這兩大系統誰好誰壞. 只是我寫了一輩子 C. 雖然為了讀懂 GOF 的 Design Patter 而把 C++ Primer 也看了大半, 但在 Embedded 這個行業, 至少在本公司, 要寫 C++ 的機會微乎其微! Qt 是我的理想選擇: 是一個完美地讓我學習 C++ 和 Design Patter 的範例! GTK 是用 C 來寫物件導向的經典! 奈何最缺的是時間, 只好捨棄了!
3. 本公司是作影像的! 如果沒有 GUI, 光看一堆數字實在太不人道! 如果可以, 我也想寫一個 linux 上的 scanner driver!

雖然捨棄了 GTK, 我還是在繁忙的工作壓力下擱置了 Qt 的學習!

最近偷閒再來, 也不知能否持續! Anyway, 作正事累的時候就偷閒玩一下也好!!

首先, 先嘗試安裝 open source 版的 Qt. 以往我成功安裝了 Linux 版, 但是 Win32 版因為環境不熟失敗. 這次希望能進步一點, 把 Win32 版也裝起來, 以下是我的步驟:

-------------------------------------------------------------
安裝 Qt4, 從官方網站下載 source tree 來 compile, 都是 4.2.3, 我是照 source tree 解開的根目錄中的 INSTALL 來裝的!
1. Windows 版本
問 Google MinGW 是什麼? 找到官網! 哇! 怎麼那麼多檔案? 沒有包好的嗎?
稍微找一下, 安裝也花了一些工夫!
先把 MinGW 和 MSYS 裝好, 在此不詳述! 開啟 MSYS 目錄中的 msys.bat, 出現一個 shell, 然後下
a) $ ./configure.exe

但是會出現 qmake 找不到的錯誤, 即使你在 PATH 中加入 C:/Qt/qmake 和 C:/Qt/bin 也一樣!! 最後我是手動把 C:/Qt/qmake/qmake.exe
複製到 C:/Qt/bin 中, 再下 configure, 就成功了!!

b). $ ./mingw32-make
-- 錯誤 --
cd tools\moc && c:/MinGW/bin/mingw32-make -f Makefile
/mingw/bin/sh: line 0: cd: toolsmoc: No such file or directory

我進去看 Qt/src/Makefile, 發現其實裏面的每一個 tools\moc 中間都有 \, 沒有相連的! 於是我想是不是 Linux 和 Win32 路徑的 "/" 和
"\" 相衝突的問題! (再加上 ming32-make)? 於是我把相關的 "\" 改成 "/", 果然就過關了! 可是只過一關下一個 Package 又有一樣的問題! 看來後面有無數同樣的關等著我, 我能一個一個去改嗎?

經過約三天的找尋, 學會了安裝 MinGW, MSYS, 乃至於 Dev C++ 全部都安裝並學了一遍. 最後終於在 Qt 官網上的
http://www.trolltech.com/developer/knowledgebase/707/?searchterm=mingw
主題為 Building Qt with MinGW fails, entry 707, 是一模一樣狀況!!

問題出在 MSYS 中的 sh.exe. 因為若它存在, 則會使用它而不用 Windows 的 shell, 而 sh.exe 不認得 Windows 路徑的 "\",
所以不用 msys.bat, 而是用 Windows 的 cmd, 路徑先設設好, 再到 C:\Qt\ 去執行 mingw32-make 即可
但是 sh.exe 不能 run, 則 MSYS 的 shell 就 run 不起來. 也就是說, 根本就不該用 MSYS 的 shell 來執行!

我把 sh.exe rename 成 sh.exe_, 然後用 WinXP 的 cmd 進入dos 模式, 後來就 make 成功了!!
稍後我想, Dev-Cpp 本身應該包的很完整, 其實不需要使用 MinGW 和 MSYS, 事實的確是如此!! 會發生這個問題, 是因為我裝了 MinGW 和 MSYS 在 Dev-C++ 之前的緣故!!


-- 錯誤 --
有一堆變數未定義, 或不認得

這也是因為我混裝了 MinGW, MSYS, 和 Dev-C++

我這次先 mingw-make clean 一次, 然後將原先指到 C:\MinGW\bin 的 path 改成 C:\Dev=Cpp 看看,
結果是 OK 了, 但是我看在 build 過程中用到超過 2 GB, 我清了一些程式才讓它完成! 看來我的 C 碟以後要放大的 16GB 比較保險!!

c) 打
$ mingw32-make install
d) 在 cmd 下, 下
$ qtdemo
隨便試幾個範例, 可以 run! 成功!!

試試 "C++ GUI Programming with QT4" 中的 hello world example:
$ qmake -project
$ qmake hello.pro
$ make
然後在下面有一個 debug 子目錄中的 hello.exe, 可以 run, Ye!

所以總結起來, 就是 configure, make, make install 3 步驟, 只是我找錯了 tool 而已!!

-- 如何清掉 build 過程中的 obj 檔呢? --
如果在 C:\ 中留這 2GB 多的暫存檔我不同意,
$ mingw32-make clean
就 OK 了. Qtdemo 也能 run,

-- Linux 版本 --
在 Debian 或 Ubuntu 都一樣順!!
./configure./make 都很順, 除了一樣有需要安裝 libx11-dev 套件之外, 在
./make install 出現錯誤:
/usr/bin/ld: cannot find -lXext
用 apt-cache search xext, 找到幾個,
aptitude install xlibs-dev

就 OK 了!!

沒有留言:

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...