最近自學了下Qt,本節講一下如何進行些簡單的字體設計,有什麼問題互相交流。
步驟如下:
一:創建一個Widget Application項目samp1,在創建窗體時選擇基類QDialog,生成的類命名爲QWDialog,並選擇生成窗體。
二:佈局
雙擊qwdialog.ui,進入界面設計(左側有工具)
(1)需要一個PlainText Edit( Iput Widgets裏),在Button裏的三個check Box(可同時多選),三個Radio Button(多選一),三個Push Button(普通按鈕)
各個組件的相關設置
對象名 | 類名稱 | 屬性設置 | 備註 |
---|---|---|---|
plaintextEdit | QPlainTextEdit | Text="Hello, World It is my demo. " Font.PointSize=20 |
用於顯示文字內容,可編輯 |
CheckBoxUnder | QCheckBox | Text="Underline" | 設置字體爲下劃線 |
QCheckBox Italic | QCheckBox | Text="Italic" | 設置字體爲斜體 |
CheckBox Bold | QCheckBox | Text="Bold" | 設置字體爲粗體 |
rBtnBlack | QRadioButton | Text="Black" | 字體顏色爲黑色 |
rBtnRed | QRadioButton | Text="Red" | 字體顏色爲紅色 |
rBtnBlue | QRadioButton | Text="Blue" | 字體顏色爲藍色 |
btnOK | QPushButton | Text="確定" | 返回確定,並關閉窗口 |
btnCancel | QPushButton | Text="取消" | 返回取消,並關閉窗口 |
btnClose | QPushButton | Text="退出" | 退出程序 |
QWDialog | QWDialog | windowTitle="Dialog by Designer" | 界面窗口的類名稱是QWDialog,objectName 不要修改 |
(2)按住"Ctrl"鍵選中三個checkBox組件,鼠標右擊->Layout->Lay out Horizontally(水平佈局);
依次將選中三個RadioButton組件爲一組,水平佈局;再拖兩個Horizontal Layout(水平分隔的空格),將他們與界面上的三個PushBotton組件選中爲一組,水平佈局。
三. 設計程序功能
(1)字體樣式設置
窗體在設計模式下,選中 checkBoxUnder 組件,單擊右鍵調出其快捷菜單。在快捷菜單中單擊菜單項“Go to slot…”(中文狀態爲“轉到槽”),出現如圖所示的對話框。
該對話框列出了 QCheckBox 類的所有信號,第一個是 clicked(),第二個是帶一個布爾類型參數的 clicked(bool)。
選擇 clicked(bool),然後單擊“OK”按鈕,在 QWDialog 的類定義中,會在 private slots 部分自動增加一個槽函數聲明,函數名是根據發射對象及其信號名稱自動命名的。
void on_checkBoxUnder_clicked(bool checked);
同時,在 qwdialog.cpp 文件中自動添加了函數 on_chkBoxUnder_clicked(bool) 的框架,在此函數中添加如下的代碼,實現文本框字體下劃線的控制。
void QWDialog::on_checkBoxUnder_clicked(bool checked)
{
QFont font=ui->plainTextEdit->font();
font.setUnderline(checked);
ui->plainTextEdit->setFont(font);
}
以同樣的方法爲 Italic 和 Bold 兩個 CheckBox設計槽函數,編譯後運行.
發現已經實現了修改字體的下劃線、斜體、粗體屬性的功能,說明信號與槽函數已經關聯了。
(2)字體顏色設置
設置字體的 3 個 RadioButton 是互斥性選擇的,即一次只有一個 RadioButton 被選中,雖然也可以採用可視化設計的方式設計其 clicked() 信號的槽函數,但是這樣就需要生成 3 個槽函數。這裏可以簡化設計,即設計一個槽函數,將 3 個 RadioButton 的 clicked() 信號關聯到這一個槽函數。
爲此,在 QWDialog 類的 private slots 部分增加一個槽函數定義如下:
void setTextFontColor();
提示 將鼠標光標移動到這個函數的函數名上面,單擊右鍵,在彈出的快捷菜單中選擇“Refactor”→“Add Definition in qwdialog.cpp”,就可以在 qwdialog.cpp 文件中自動爲函數 setTextFontColor() 生成一個函數框架。
在 qwdialog.cpp 文件中,爲 setTextFontColor() 編寫實現代碼如下:
void QWDialog::setTextFontColor()
{
QPalette plet=ui->plainTextEdit->palette();
if(ui->rBtnBlue->isChecked())
plet.setColor(QPalette::Text,Qt::blue);
else if (ui->rBtnBlack->isChecked())
plet.setColor(QPalette::Text,Qt::black);
else if(ui->rBtnRed->isChecked())
plet.setColor(QPalette::Text,Qt::red);
else
plet.setColor(QPalette::Text,Qt::black);
ui->plainTextEdit->setPalette(plet);
}
由於這個槽函數是自定義的,所以不會自動與 RadioButton 的 clicked() 事件關聯,此時編譯後運行程序不會實現改變字體顏色的功能。需要在 QWDialog 的構造函數中手工進行關聯,代碼如下:
紅色框內爲添加的代碼。編譯後運行。
(3)三個按鈕的功能設計
界面上還有“確定”“取消”“退出”3 個按鈕,這是在對話框中常見的按鈕。“確定”表示確認選擇並關閉對話框,“取消”表示取消選擇並關閉對話框,“退出”則直接關閉對話框。
QWDialog 是從 QDialog 繼承而來的,QDialog 提供了 accept()、reject()、close() 等槽函數來表示這三種狀態,只需將按鈕的 clicked() 信號與相應槽函數關聯即可。
下面採用可視化的方式,將按鈕的 clicked() 信號與這些槽函數關聯起來。在 UI 設計器裏,單擊上方工具欄裏的“Edit Signals/Slots”按鈕,窗體進入信號與槽函數編輯狀態。
點擊Signal&Solts Editor的“+”,添加信號與槽的關聯,按下圖設置(雙擊即可選擇對應的Sender):
四:編譯運行
這個實例程序的功能全部完成了。採用 UI 設計器設計了窗體界面,採用可視化和程序化的方式設計槽函數,設計信號與槽函數之間的關聯。
從以上的設計過程可以看到,Qt Creator 和 UI 設計器爲設計應用程序提供了強大的可視化設計功能。下一節說下代碼化UI設計。