C++ 入門指南 4.01

單元 24 - 認識第三方程式庫 - Qt

-unit24-

除了標準程式庫 (standard library) 之外, C++ 還有為數眾多的第三方程式庫 (third party library) ,其中較為簡單且開放原始碼 (open source) 的 GUI 程式庫就是 Qt 了

標準程式庫 → 原始程式碼 ← 第三方程式庫

Qt 是從 1991 年開始發展的,取名為 Qt 據說是因為 Q 在 Haavard 的 Emacs 字體特別漂亮,至於 t 則是 toolkit 的縮寫。 Qt 的最主要特色的就是跨平台 (cross-platform) 支援,例如

等等,亦表現平台特色的圖形使用者介面 (graphical user interface)

雖說 Qt 知名於他的 GUI 應用,不過 Qt 程式庫包含如下各種應用

有些可能會和標準程式庫中的應用重複,例如 Qt 中處理字串 (string) 型態 (type) QString ,這與標準程式庫中的 string 也是不同的。

現在的 Qt 是由芬蘭的 Digia 公司維護,除了有商業授權外,也有 GPL/LGPL 的社群版授權,可以此開發自由軟體,自己下載來寫練習程式 (program) 也是沒有問題的。

下載 Qt 首先連到計畫的官網

點擊〔Download.Try.〕,就進入下載的網頁,這裡分成商業版及社群版,商業版在試用期結束後要付月費才能繼續使用,如果是學習 Qt ,這裡選擇社群版下載安裝即可。

請選擇最新的 Qt 版本,本書範例採用 6.2 ,這會連帶安裝相關的編譯工具,約 4.88GB 左右的空間,詳細下載安裝過程,請參考如何安裝 Qt

我們打開 Qt Creator ,先點擊〔範例〕頁籤,可以看到 Qt Creator 提供了超過不少個範例程式

-qt_example_1-

〔教學〕及左邊〔說明〕的頁籤也提供大量的教學及說明文件,更多的資料包括範例也可到官網查詢。

我們藉由範例先來看看 Qt 有什麼魅力吧!點擊任一範例都可開啟專案,然後左下方有個像是媒體播放器的綠色執行鈕,點擊這個按鈕,專案就會編譯執行,例如以下為 Calqlatr 的執行視窗

-qt_example_2-

這是用 Qt 做的計算機,打開了就玩玩看囉

-qt_example_3-

藉由範例是學習 GUI 的絕佳途徑,開啟專案後,可再由選單中〔檔案〕的〔開啟檔案或專案〕打開專案裡的原始檔案。

玩一個還意猶未盡的話,旁邊還有個 flipable 翻牌小範例,也來玩玩囉

-qt_example_4-

先點左邊的牌,可以看到翻牌動畫

-qt_example_5-

再點右邊的牌,可以看到第二種翻牌動畫

-qt_example_6-

接下來,我們先來介紹 Qt Creator 吧!

中英文術語對照
跨平台cross-platform
圖形使用者介面graphical user interface
開放原始碼open source
程式program
標準程式庫standard library
字串string
第三方程式庫third party library
型態type
重點整理
1. 除了標準程式庫外, C++ 還有為數眾多的第三方程式庫。
2. Qt 為知名的 GUI 應用程式庫,除了 GUI 外, Qt 也具有多種應用。
3. Qt Creator 為 Qt 官方提供的整合開發環境,除了可以寫程式外還有文件及大量的範例檔案。
問題與討論
1. 為什麼 Qt 要另外定義 QString ,而非直接運用標準程式庫中的 string
2. 整合開發環境跟文字編輯器有什麼不同?兩者各有哪些優點或缺點?
練習
1. 標準程式庫中的 string 提供字串許多物件功能,寫一個程式 exercise2401.cxx ,利用 empty() 判斷字串是否是空字串,如果是空字串就印出 "空字串" ,否則印出字串完整內容。 參考程式碼
2. 承上題,寫一個程式 exercise2402.cxx ,先宣告一個英文句子的字串變數,然後用 append() 附加一個空格,再用 append() 附加另一段英文句子,最後印出來。 參考程式碼
3. 承上題,寫一個程式 exercise2403.cxx ,先宣告一個字串變數如 "Fr yr mnd" ,然後利用 insert() 插入母音及句點, insert() 的第一個參數為索引值,第二個參數則是要插入的英文字串,最後印出完整句子。 參考程式碼
4. 承上題,寫一個程式 exercise2404.cxx ,先宣告兩個英文句子的字串變數,兩個英文句子有一個單字的差異,後利用 compare() 兩個英文句子是否相同,印出結果,再利用參數設定指定範圍的索引值,比較索引值範圍的子字串是否相同,同樣印出結果。 參考程式碼
5. 承上題,寫一個程式 exercise2406.cxx ,先宣告一個英文句子的字串變數,例如 "Free your hand." ,然後利用 replace() 置換索引值 1013 的文字,這裡 1013replace() 頭兩個參數,要置換的文字如 "mind" 為第三個參數,最後印出置換後的英文句子。 參考程式碼
6. 承上題,寫一個程式 exercise2406.cxx ,先宣告一個英文句子的字串變數,例如 "There is no spoon." ,然後利用 substr() 逐行印出每個英文單字, substr() 需要兩個參數,第一個參數為子字串的起始字元,第二個參數為結束字元。 參考程式碼
7. 承上題,寫一個程式 exercise2407.cxx ,先宣告一個英文句子的字串變數,例如 "There is no spoon." ,然後利用 find() 尋找是否存在指定的子字串,結果回傳 size_type 型態的索引值,先找子字串像是 "is" ,然後在指定索引值在後再次尋找,如果找到就印出索引值,沒找到印出 -1參考程式碼
8. 承上題, C++20 新增了判斷字串開頭子字串的 starts_with() ,寫一個程式 exercise2408.cxx ,先宣告一個英文句子的字串變數,例如 "Free your mind." ,然後利用 starts_with() 判斷開頭是否為 "Free""free" ,並把結果印出來。 參考程式碼
9. 承上題, C++20 也新增了判斷字串結尾子字串的 ends_with() ,寫一個程式 exercise2409.cxx ,先宣告一個英文句子的字串變數,例如 "Free your mind." ,然後利用 starts_with() 判斷結尾是否為 "mind""." ,並把結果印出來。 參考程式碼
10. 承上題, pop_back() 可以移除字串的最後一個字元, push_back() ,寫一個程式 exercise2410.cxx ,先宣告一個英文句子的字串變數,例如 "Free your mind," ,利用 pop_back() 移除掉最後的逗點,再用 push_back() 加入句點,然後印出修改前後的對照。 參考程式碼

相關教學影片

上一頁 單元 23 - 認識標準程式庫
回 C++ 入門指南 4.01 目錄
下一頁 GUI 篇
回 C++ 教材
回程式語言教材首頁