190 likes | 347 Views
Using QT. 這個文件告訴您如何建立以 QT 撰寫程式的環境。對於如何使用,也會大略提到。 下載 QT 相關程式 安裝 QT 用工具建立一個簡單的程式 ( 可執行檔 ) ※QT 是一個以 C++ 觀念實作的軟體發展工具. 下載 QT 相關程式. 由於 QT 是 free software, 所以您可以從各大 ftp 站取得。例如在 FTP site : ftp.se.ntou.edu.tw 我們進到 pub/FreeBSD/distfiles/ 這裡的 qt* 各個檔案就是 QT 的相關程式 (next page).
E N D
Using QT 這個文件告訴您如何建立以 QT 撰寫程式的環境。對於如何使用,也會大略提到。 • 下載 QT 相關程式 • 安裝 QT • 用工具建立一個簡單的程式(可執行檔) ※QT 是一個以 C++ 觀念實作的軟體發展工具
下載 QT 相關程式 由於 QT 是 free software, 所以您可以從各大 ftp 站取得。例如在 FTP site : ftp.se.ntou.edu.tw 我們進到 pub/FreeBSD/distfiles/ 這裡的 qt* 各個檔案就是 QT 的相關程式 (next page)
下載 QT 相關程式 建議您使用 qt-x11* 的 source code. 這是包含一些 GUI tools 的版本,讓您在製作 X-window 的程式較為便利。
安裝 QT • 解壓縮 • 設定: 環境變數 • 編譯: 函式庫與相關程式、工具等等
安裝 QT • 解壓縮 首先執行 gzip –d filename.tar.gz 把您下載下來的檔案解壓縮成 filename.tar 的檔案,再以 tar xvf filename.tar 解開,就會得到一個 QT 的 source code 的目錄 (ex: qt-2.2.3)
安裝 QT • 設定 (可參考 source code 中的 INSTALL 檔案) 在開始編譯 QT 之前,您必須做一些相關的環境變數的設定。 • 將解壓縮後得到的 QT 目錄放至 /usr/local/qt Example: mv qt-2.2.3 /usr/local/qt • 把下列幾行加入您的設定檔 .bashrc (若您是以 root 登入,則 .bashrc 會在 /root/.bashrc) Example: QTDIR=/usr/local/qt PATH=$QTDIR/bin:$PATH MANPATH=$QTDIR/doc/man:$MANPATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH MANPATH LD_LIBRARY_PATH
安裝 QT • 編譯 (在開始編譯之前,請先重新登入,使環境變數發生作用) 請到 /usr/local/qt/ 輸入下列指令進行編譯的動作 ./configure make (大約需要 45 分鐘) ※在 make 的過程中只要不發生問題,代表 make 後就已經完成安裝 QT 的所有步驟(可以開始使用 QT!!) ※如果在編譯的過程中發生其他問題,請自行解決。(比如說您的系統沒有 C++ 的 compiler, 請自行安裝相關套件)
用工具建立一個簡單的程式 這一部份的重點是在於如何利用 QT 內附的工具來產生 UI 介面。(請配合附件以了解下列各部份的說明) • UI designer (designer) • UI compiler (uic) • SIGNAL & SLOT • Meta Object Compiler (moc) • Makefile & main.cpp
用工具建立一個簡單的程式 UI designer • 在 X-window 內執行 designer 的指令後,就會出現一個類似 Microsoft Visual Basic 的 UI designer, 您可以利用它來設計出您想要的程式介面,並設定各個元件的屬性。設計完成後,請將它存檔成檔案如 myWind1.ui 等類似檔名。
用工具建立一個簡單的程式 • UI Compiler (uic) 接下來,利用 QT 提供的 uic, 它可以將您的 *.ui 轉換成 C++ 的程式碼, 做法如下(在命令列執行下列指令): uic myWind1.ui –o myWind1.h uic –impl myWind1.h myWind1.ui –o myWind1.cpp
用工具建立一個簡單的程式 • SIGNAL & SLOT 光是靠 uic 產生的 myWind1.h 跟 myWind1.cpp 是無法滿足一個視窗程式的要求的,因為還少了重要的 event handling. (別忘了.. Designer 跟 uic 只幫您建立 “UI” 而已喔!!) 接下來的 event handling 要您自己再做些小動作,才能完成。 (請看下一頁的說明)
用工具建立一個簡單的程式 • SIGNAL & SLOT 在 QT 的類別庫中,已經有很多以物件導向方式設計出來的元件,其中也為您加上了視窗程式必備的 signals. 這邊所說的 signal, 就是 user 對各物件所做的動作(比方說,您對一個 button 做了一個 click 的動作,程式便會收到一個來自button 的 clicked() 的 signal)。 各個物件提供了哪些 signals, 可以參考/usr/local/qt/doc/html/hierachy.html (注意!! 有些 signals 會是從父類別繼承下來的喔!!)
用工具建立一個簡單的程式 • SIGNAL & SLOT 光是程式收到 signal 還不夠,因為它還不曉得該如何處理這個 signal. 接下來,就是您必須做的事(為 signal 加上對應的 event handler, 又叫做 slot)。 • 實作 event handler (slot) • 把 slot 跟 signal 連起來,使程式收到 signal 之後會自動去呼叫您的 slot.
用工具建立一個簡單的程式 • SIGNAL & SLOT 1. 實作 event handler (slot) 首先請決定(在腦中思考)您要把這個 slot 交給誰來處理…. 習慣上是把 slot 寫在父視窗裡,由父視窗處理掉 signal。 myWind1 實作 slot 收到 signal button1
用工具建立一個簡單的程式 • SIGNAL & SLOT 1. 實作 event handler (slot) 決定要把 slot 的去處之後,請到程式碼裡編輯。 class myWind1 : public QWidget /* 在 myWind1.h 裡 */ { /* 請加上下面兩行 */ public slots: void mySlot1(); /* 其他的宣告沒有必要去更改喔!! */ }; /* 再到 myWind1.cpp 裡加上該 slot 的 implementation */ void myWind1::mySlot1() {……..}
用工具建立一個簡單的程式 • SIGNAL & SLOT 2. 連接 signal 與 slot 修改 myWind1::myWind1(), 把下面 connect(…) 的敘述加到 button1 建構完成的後面。 connect (button1, SIGNAL(clicked()), this, SLOT(mySlot1())); 其中四個參數的前兩個是 event source(button1) 跟 event type(clicked()), 後面兩個則是負責處理 signal 的 event handler. (this 是指 myWind1 物件)
用工具建立一個簡單的程式 • Meta Object Compiler (moc) moc 的作用是用來處理 RTTI (run time type information) 與 signal-slot connection. 用法如下: moc myWind1.h –o moc_myWind1.cpp ※ 加入 slot 的動作要在 moc 之前完成!!
用工具建立一個簡單的程式 • Makefile & main.cpp 您可以從 QT 的範例程式裡 copy Makefile 跟 main.cpp 來改一改,對初學者而言,自己寫可不是件容易的事…. 最後,執行 make, 就可以得到執行檔囉!! ※附件中的 Makefile 是簡化過的,比較容易看懂,您也可以參考看看。