C++ 入門指南

單元 27 - 設計介面

本書已有新版,請參考 C++ 入門指南 4.01 - 單元 27 - 使用 QML 設計視窗外觀

介面 (interface) 是使用者 (user) 與軟體 (software) 之間溝通的橋樑,設計良好的介面可以讓使用者易於學習與使用軟體

使用者 | 介面 | 軟體

早期電腦使用命令列介面 (command line interface) ,像是我們發展 encrypt.cpp 就是在命令列編譯的,至於命令列介面或圖形介面 (graphical interface) 孰優孰劣則因習慣而異,對初學者或不打算深入研究的人來講,自然不喜歡命令列一個指令一個指令的繁複,雖說對新手是繁複,反而對很多程式老手而言,命令列才是工作效率的最佳選擇。

可是命令列介面對一般使用者就沒那麼友善了,圖形介面有視窗、按鈕、圖示、顏色等等指引,相對好用很多,因此提供給一般使用者的軟體現在都優先採用圖形介面,也就是說, MVC 中模式的 V ,現在也多是指圖形介面。

提款機、互動式導覽機或智慧型手機都有觸控介面,基本上觸控介面是基於圖形介面的,滑鼠按鍵跟游標變成由觸控螢幕感應手指按了哪個圖示。

下圖為 Designer 開啟後的畫面,左邊看到一整排的視窗小工具 (widget)

-qt_ui02-

上圖中間的視窗對應到右上方的 EncryptWindow 類別 (class) ,預設有選單列、工具列及狀態列,分別是 EncryptWindow 類別裡面的 menuBarmainToolBarstatusBar 資料成員 (data member) , menuBarQMenuBar 類別的物件 (object) , mainToolBarQToolBar 類別的物件,而 statusBar 則是 QStatusBar 類別的物件。

當作視窗的 EncryptWindow 類別繼承QMainWindow ,這是個可以容納物件的容器 (container) 類別,同樣的道理, GUI 中很多類別都是屬於容器類別,像是 LayoutsViews 等等都是。

右下方可調整每個物件的資料成員,點擊 menuBar 就會切換成 QMenuBar 的內容,點擊其他亦同,這裡可直接在視窗中調整資料成員值,利用 Qt 專屬的 QML 語言對類別進行標記,最後會一併編譯到執行檔中。

我們直接利用 Designer 拖曳小工具替 Encrypt 做出 GUI ,詳細步驟請參考附錄利用 Qt Designer 設計 GUI ,拖曳到主視窗就會直接依拖曳的位置設定好座標,現在先來認識一下常見的小工具吧!

拖曳到的位置決定座標,這是一種絕對定位的方式,也可以用版面 (layout) 進行相對定位。

我們從上而下來看左邊的視窗小工具,如下

-qt_w_layout- Layouts 用來放其他小工具,拖曳小工具進去就會按預設的方式排放。
-qt_w_spacer- Spacers 是分隔線。
-qt_w_button- Buttons 是各式各類的按鈕。
-qt_w_itemview- Item Views 是含有項目的容器。
-qt_w_itemwidget- Item Widgets 是含有項目的小工具。
-qt_w_container- Containers 是視窗工具的容器類別
-qt_w_inputwidget- Input Widgets 是各式各類的輸入工具。
-qt_w_display- Display Widgets 是各式各類顯示訊息的工具。

我們預計做出如下的 GUI

-encryptwindow-

我們開始要讓按鈕有反應,這要設定每個按鈕的 SIGNAL 然後在 encryptwindow.cpp 中設定對應的 SLOT 成員函數 (member function) ,倒是 Designer 已經簡化程式編寫,接下來跳到信號槽就可以囉!

相關教學影片

中英文術語對照
介面 interface
使用者 user
軟體 software
命令列介面 command line interface
圖形介面 graphical interface
小工具 widget
類別 class
資料成員 data member
物件 object
容器 container
版面 layout
成員函數 member function
重點整理
1. 介面是軟體與使用者之間溝通的橋樑,早期電腦使用命令列介面,現在多是圖形介面(包括觸控介面)。
2. Qt Creator 提供的 Designer 可直接利用 QML 拉出 GUI ,編譯後自動轉換成物件,省掉寫程式碼的瑣碎。
3. Designer 有各式各樣的視窗小工具,包括容器或是常見的按鈕、輸入方塊等。
問題與討論
1. 除了命令列介面、圖形介面外,還有其他種類的介面嗎?
2. 什麼是 QML ?用 QML 有什麼方便的地方?
練習
1. 承接單元 24 的 guess_game 專案,替猜數字遊戲用 Designer 設計圖形介面,如下圖示
gamewindow
2. 承上題,開啟 guessgame.ui ,觀察 QML 的語法。

上一頁 單元 26 - 記憶體管理
回 C++ 入門指南目錄
下一頁 單元 28 - 跳到信號槽
回 C++ 教材
回程式語言教材首頁