Line Edit
QLineEdit用來表示單行輸入框,可以輸入一段文本,但是不能換行
核心屬性:
核心信號
信號 | 說明 |
void cursorPositionChanged(int old,int new) | 當鼠標移動時發出此型號,old為先前位置,new為新位置 |
void editingFinished() | 當按返回或回車鍵時,或行編輯失去焦點時,發出此信號 |
void returnPressed() | 當返回或回車鍵按下時發出此信號,如果設置了驗證器,必須要驗證通過才能觸發 |
void selectionChanged() | 當選中的文本發生改變時,發出此信號 |
void textChange(const QString &text) | 當QLineEdit中的文本改變時,發出此信號,test是新的文本。代碼對文本的修改也能觸發此信號。 |
void textEdited(const QString &text) | 當QLineEdit中的文本改變時,發出此信號,text時新的文本。代碼對文本的修改不能觸發此信號。 |
例:
實現用戶能輸入賬號,密碼及提交
在ui界面創建label進行輸入內容提示,創建對應的lineEdit輸入框,提交按鈕
進行輸入框初始化
設置pushButton槽函數
inputMask功能比較有效,只能進行簡單的驗證
若要實現比較復雜的驗證需要使用“正則表達式”
正則表達式,本質上是一個帶有特殊字符的字符串,特殊字符用來表示另一個字符串的特征,借助正則表達式來描述一些具有一定特定的字符串
隨用隨查,無需記憶
例:
在ui界面創建一個lineEdit和pushButton控件
設置提交按鈕初始狀態
只有當輸入字符為合法手機號碼時才允許進行提交
創建正則表達式及驗證器
通過定義textEdited槽函數實現lindEdit內容發生修改就調用驗證器
當輸入以1開頭,后面跟上10個數字的字符串時,就可以進行pushButton的點擊
Text Edit
QTextEdit表示多行輸入框,也是一個富文本&markdown編輯器,并且能在內容超出編輯范圍時自動提供滾動條
核心屬性
屬性 | 說明 |
markdown | 輸入框持有的內容,支持 markdown格式,能夠自動的對 markdown文本進行渲染成html |
html | 輸入框持有的內容支持大部分 htm標簽,包括img和table等 |
placeHolderText | 輸入框為空時提示的內容 |
readOnly | 是否只讀 |
undoRedoEnable | 是否開啟undo/redo功能 按下ctrl+z觸發undo 按下ctrl+y觸發redo |
autoFormating | 開啟自動格式化 |
tabstopWidth | 按下縮進占多少空間 |
overwirteMode | 是否開啟覆蓋寫模式 |
acceptRichText | 是否結束富文本內容 |
verticalScrollBarPolicy | 垂直方向滾動條的出現策略 Qt::ScorllBarAsNeeded:根據內容自動決定是否需要滾動條。這種默認值 Qt::ScorllBarAlwaysOff:總是關閉滾動條 Qt::ScorllBarAlwaysOn:總是顯示滾動條 |
horizontalScrollBarPolicy | 水平滾動條的出現策略 Qt::ScrollBarAsNeeded:根據內容自動決定是否需要滾動條。這是默認值 Qt::ScorllBarAlwaysOff:總是關閉滾動條 Qt::ScrollBarAlwaysOn:總數顯示滾動條 |
核心信號:
信號 | 說明 |
textChanged() | 文本內容改變時觸發 |
selectionChanged() | 選中范圍改變時觸發 |
cursorPositionChanged() | 光標移動時觸發 |
undoAvailable(bool) | 可以進行undo操作時觸發 |
redoAvailable(bool) | 可以進行redo操作時觸發 |
copyAvaiable(bool) | 文本被選中/取消選中時觸發 |
例:
在ui界面創建一個textEdit用于接收輸入內容,label用于顯示textEdit內容
轉到textEdit的textChanged槽函數
Combo Box
QComboBox表示下拉框
核心屬性
屬性 | 說明 |
currentText | 當前選中的文本 |
currentIndex | 當前選中的條目下標 從0開始計算,如果當前沒有條目被選中,值為-1 |
editable | 是否允許修改 設置為true時,QComboBox的行就類似于QLineEdit,也可以設置validator |
iconSize | 下拉框圖標大小 |
maxCount | 最多允許有多少個條目 |
核心接口
接口 | 說明 |
addItem(const QString&) | 添加一個條目 |
currentIndex() | 獲取當前條目的下標 |
currentText() | 獲取當前條目的文本內容 |
核心信號
信號 | 說明 |
activated(int) activated(QString & text) | 當用戶選中了一個選項時發出 這個時候相當于用戶點開下拉框,并且鼠標劃過某個選項 此時還沒有確認做出選擇 |
currentIndexChanged(int) currentIndexChanged(const QString & text) | 當前選項改變時發出 此時用戶已經明確的選擇了一個選項 用戶操作或者通過程序操作都會觸發這個信號 |
editTextChanged(const QString & text) | 當編輯框中的文本改變時發出 (editable為true時有效) |
例:
通過ComboBox模擬點餐
在ui界面創建兩個label和兩個ComboBox
在構造函數中初始化ComboBox內容
在ui界面創建提交按鈕pushButton
轉到pushButton的clicked槽函數
能順利獲取到ComboBox內容
實現通過文件導入ComboBox內容
在ui界面創建一個label和ComboBox
在電腦創建一個txt文件,在其內輸入不同專業
在構造函數讀取文件內容
從而實現將文件內容設置為ComboBox選項
Spin Box
使用QSpinBox或者QDoubleSpinBox表示“微調框”,它時帶有按鈕的輸入框,可以用來輸入整數/浮點數,通過點擊按鈕來修改數值大小
如:
核心屬性
屬性 | 說明 |
value | 存儲的數值 |
singleStep | 每次調整的“步長”,按下一次按鈕數據變化多少 |
displayInteger | 數字的進制,例如displayInteger設為10,則是按十進制表示,設為2,則為2進制表示 |
minimum | 最小值 |
maximum | 最大值 |
suffix | 后綴 |
prefix | 前綴 |
wrapping | 是否允許換行 |
frame | 是否帶邊框 |
alignment | 文字對齊方式 |
readOnly | 是否允許修改 |
buttonSymbol | 按鈕上的圖標 UpDownArrows:上箭頭模形式 PlusMinus:加減號形式 NoButtons:沒有按鈕 |
accelerated | 按下按鈕時是否為快速調整模式 |
correctionMode | 輸入有誤時如何修正 QAbstractSpinBox::CorrectToPreviousValue:如果用戶輸入了一個無效的值,那么SpinBox會恢復為上一個有效值 QAbstractSpinBox::CorrectToNearesValue: 如果用戶輸入了一個無效的值,SpinBox會恢復為最接近的有效值。 |
keyboardTrack | 是否開啟鍵盤跟蹤 設為true,每次在輸入框輸入一個數字,都會觸發一次valueChanged()和 textChanged()信號 設為false,只有在最終按下enter或者輸 入框失去焦點,才會觸發valueChanged() 和textChanged()信號 |
核心信號
信號 | 說明 |
textChanged(QString) | 微調框的文本發生改變時會觸發 參數QString帶有前綴和后綴 |
valueChanged(int) | 微調框的文本發生改變時會觸發 參數int,表示當前的數值 |
例:
在ui界面創建兩個label,一個SpinBox,一個DoubleSpinBox
再創建一個pushButton
在構造函數對得分范圍進行初始化
轉到pushButton的槽函數,將得分用qDebug進行輸出
Date Edit 和Time Edit
使用DateEdit作為日期的微調框
使用TimeEdit作為時間的微調框
使用Date/Time Edit作為時間日期的微調框
三個控件使用方法類似
DateTime Edit核心屬性
屬性 | 說明 |
dateTime | 時間日期的值,如2000/1/1 0:00:0 |
date | 單純日期的值,如2000/1/1 |
time | 單純時間的值,如0:00:00 |
displayFormat | 時間日期格式,如yyyy/M/d H:mm y表示年份 M表示月份 d表示日期 H表示小時 m表示分鐘 s表示秒 不同語言/庫的設定規則時是不同的,隨用隨查 |
minimumDateTime | 最小時間日期 |
maximumDateTime | 最大時間日期 |
timeSpec | Qt::LocalTime:顯示本地時間 Qt::UTC:顯示協調世界時 Qt::OffsetFromUTC:顯示相對于UTC的偏移量(時差) |
核心信號
信號 | 說明 |
dateChanged(QDate) | 日期改變時觸發 |
timeChanged(QTime) | 時間改變時觸發 |
dataTimeChanged(QDateTime) | 時間日期任意一個改變時觸發 |
例:
實現一個時間計算,計算兩個時間中間的間隔時多少天/多少小時
在ui界面創建兩個datetime Edit,一個pushButton,一個label
轉到pushButton的clicked槽函數
但是此時代碼存在邏輯錯誤,若時間日期相隔幾個小時,但不屬于同一天,進行計算時就會發生錯誤
如:
兩日期相差6小時,卻計算出1天6小時
不使用daysto計算日期差,通過秒數插值求日期
Dial
使用QDial表示一個旋鈕
核心屬性
屬性 | 說明 |
value | 持有的數值 |
minimum | 最小值 |
maximum | 最大值 |
singleStep | 按下方向鍵的時候改變的步長 |
pagesStrp | 按下pageUp/pageDown的時候改變的步長 |
sliderPosition | 界面上旋鈕顯示的初始位置 |
tracking | 外觀是否會跟蹤數值變化 默認值為true,一般無需修改 |
wrapping | 是否允許循環調整 即數值如果超過最大值,是否允許回到最小值 |
notchesVisble | 是否顯示刻度線 |
notchTarget | 刻度線之間的相對位置 數字越大,刻度線越稀疏 |
例:
通過旋鈕控制窗口不透明度opcity
在ui界面創建一個旋鈕
在構造函數進行初始化
轉到dial的valueChanged槽函數
Slider
使用Slider表示一個滑動條
如:
核心屬性
屬性 | 說明 |
value | 持有的數值 |
minimum | 最小值 |
maximum | 最大值 |
singleStep | 按下方向鍵的時候改變的步長 |
pagesStrp | 按下pageUp/pageDown的時候改變的步長 |
sliderPosition | 滑動條顯示的初始位置 |
tracking | 外觀是否會跟蹤數值變化, 默認值為true,無需修改 |
orientation | 滑動條的方向是水平還是垂直 |
invertedAppearance | 是否要翻轉滑動條的方向 |
tickPosition | 刻度的位置 |
tickInterval | 刻度的密集程度 |
核心信號
信號 | 說明 |
valueChanged(int) | 數值改變時觸發 |
rangeChanged(int,int) | 范圍變化時觸發 |
例:
通過兩個不同方向的滑動條分別控制窗口寬度和高度
在構造函數翻轉垂直方向滑動條(Vertical Silder)的方向
對滑動條進行初始化,將滑動條初始值設置為窗口的高度和寬度
轉到滑動條的valueChanged槽函數,實現將horizentalSlider的值設置為窗口的寬度,將verticalSlider的值設置為窗口的高度
實現通過滑動條修改窗口大小
實現通過自定義快捷鍵操控滑動條
在構造函數創建快捷鍵進行綁定,頭文件進行聲明槽函數
實現各個按鍵的槽函數,來通過快捷鍵發出信號,調用槽函數,在槽函數內對滑動條的值進行修改,滑動條值發生修改,發送信號,調用槽函數,修改窗口大小