Qt輸入類控件用法超詳細(xì)講解
1.Line Edit
QLineEdit
?來表?單?輸?框,可以輸??段?本,但是不能換?核心屬性:
text
:輸入框中的文本inputMask
:輸入內(nèi)容格式約束inputMask
只能進(jìn)?簡(jiǎn)單的輸?格式校驗(yàn)- 實(shí)際開發(fā)中,基于正則表達(dá)式的?式是更核?的?法
maxLength
:最大長(zhǎng)度frame
:是否添加邊框echoMode
:顯示方式QLineEdit::Normal
:默認(rèn)值,?本框會(huì)顯?輸?的?本QLineEdit::Password
:在這種模式下,輸?的字符會(huì)被隱藏, 通常?星號(hào)(*
)或等號(hào)(=
)代替QLineEdit::NoEcho
:在這種模式下,?本框不會(huì)顯?任何輸?的字符
cursorPosition
:光標(biāo)所在的位置alignment
:文字對(duì)齊方式,設(shè)置水平和垂直方向的對(duì)齊dragEnabled
:是否允許拖拽readOnly
:是否是只讀的placeHolderText
:當(dāng)輸入框內(nèi)容為空的時(shí)候,顯示什么樣的提示信息clearButtonEnabled
:是否會(huì)自動(dòng)顯示出"清除按鈕"
核心信號(hào):
void cursorPositionChanged(int old, int new)
:當(dāng)?標(biāo)移動(dòng)時(shí)發(fā)出此信號(hào)old
為先前的位置,new
為新位置
void editingFinished()
:當(dāng)按返回或者回?鍵時(shí),或者?編輯失去焦點(diǎn)時(shí),發(fā)出此信號(hào)void returnPressed()
:當(dāng)返回或回?鍵按下時(shí)發(fā)出此信號(hào)- 如果設(shè)置了驗(yàn)證器,必須要驗(yàn)證通過,才能觸發(fā)
void selectionChanged()
:當(dāng)選中的?本改變時(shí),發(fā)出此信號(hào)void textChanged(const QString &text)
:當(dāng)QLineEdit
的?本改變時(shí),發(fā)出此信號(hào)text
是新的?本,代碼對(duì)?本的修改能夠觸發(fā)這個(gè)信號(hào)
void textEdited(const QString &text))
:當(dāng)QLineEdit
中?本改變時(shí),發(fā)出此信號(hào)text
是新的?本,代碼對(duì)?本的修改不能觸發(fā)這個(gè)信號(hào)
示例:對(duì)輸入框內(nèi)容進(jìn)行驗(yàn)證
QRegExp
創(chuàng)建?個(gè)正則表達(dá)式對(duì)象QRegExpValidator
創(chuàng)建?個(gè)驗(yàn)證器對(duì)象,Qt中內(nèi)置了四個(gè)主要的驗(yàn)證其對(duì)象QRegularExpressionValidator
在匹配性能上做出了?定優(yōu)化,但是從使??度講,和QRegExpValidator
差別不?
// 槽函數(shù)實(shí)現(xiàn) { void Widget::on_lineEdit_textEdited(const QString &arg1) { QString content = arg1; int pos = 0; if(ui->lineEdit->validator()->validate(content, pos) == QValidator::Acceptable) { ui->pushButton->setEnabled(true); } else { ui->pushButton->setEnabled(false); } } } // 功能實(shí)現(xiàn) { // 設(shè)置按鈕默認(rèn)是禁用狀態(tài) ui->pushButton->setEnabled(false); // 給lineEdit注冊(cè)一個(gè)validator ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^1\\d{10}$"))); }
2.Text Edit
QTextEdit
表?多?輸?框- 是?個(gè)富?本&Markdown編輯器,并且能在內(nèi)容超出編輯框范圍時(shí)?動(dòng)提供滾動(dòng)條
- 核心屬性:
markdown
:輸?框內(nèi)持有的內(nèi)容,?持Markdown格式,能夠?動(dòng)地對(duì)Markdown?本進(jìn)?渲染成htmlhtml
:輸?框內(nèi)持有的內(nèi)容,可以?持?部分html標(biāo)簽,包括img和table等placeHolderText
:輸?框?yàn)榭諘r(shí)提?的內(nèi)容readOnly
:是否是只讀的undoRedoEnable
:是否開啟undo/redo
功能- 按下
Ctrl + z
觸發(fā)undo
- 按下
Ctrl + y
觸發(fā)redo
- 按下
autoFormating
:開啟自動(dòng)格式化tabstopWidth
:按下縮進(jìn)占多少控件overwriteMode
:是否開啟覆蓋寫模式- 對(duì)應(yīng)鍵盤上
insert
鍵開啟的功能
- 對(duì)應(yīng)鍵盤上
acceptRichText
:是否接受富文本內(nèi)容verticalScrollBarPolicy
:垂直?向滾動(dòng)條的出現(xiàn)策略Qt::ScrollBarAsNeeded
:默認(rèn)值,根據(jù)內(nèi)容?動(dòng)決定是否需要滾動(dòng)條Qt::ScrollBarAlwaysOff
:總是關(guān)閉滾動(dòng)條Qt::ScrollBarAlwaysOn
:總是顯?滾動(dòng)條
horizontalScrollBarPolicy
:?平?向滾動(dòng)條的出現(xiàn)策略Qt::ScrollBarAsNeeded
:默認(rèn)值,根據(jù)內(nèi)容?動(dòng)決定是否需要滾動(dòng)條Qt::ScrollBarAlwaysOff
:總是關(guān)閉滾動(dòng)條Qt::ScrollBarAlwaysOn
:總是顯?滾動(dòng)條
- 核心信號(hào):
textChanged()
:?本內(nèi)容改變時(shí)觸發(fā)selectionChanged()
:選中范圍改變時(shí)觸發(fā)cursorPositionChanged()
:光標(biāo)移動(dòng)時(shí)觸發(fā)undoAvailable(bool)
:可以進(jìn)?undo
操作時(shí)觸發(fā)redoAvailable(bool)
:可以進(jìn)?redo
操作時(shí)觸發(fā)copyAvaiable(bool)
:?本被選中/取消選中時(shí)觸發(fā)
3.Combo Box
QComboBox
表?下拉框- 核心屬性:
currentText
:當(dāng)前選中的文本currentIndex
:當(dāng)前選中的條目下標(biāo)- 從0開始計(jì)算
- 如果當(dāng)前沒有條?被選中,值為-1
editable
:是否允許修改- 設(shè)為
true
時(shí),QComboBox
的?為就?常接近QLineEdit
,也可以設(shè)置validator
- 設(shè)為
iconSize
:下拉框圖標(biāo)(小三角)的大小maxCount
:最多允許有多少個(gè)條目
- 核心方法:
addItem(const QString&)
:添加?個(gè)條?currentIndex()
:獲取當(dāng)前條?的下標(biāo)- 從0開始計(jì)算
- 如果當(dāng)前沒有條?被選中,值為-1
currentText()
:獲取當(dāng)前條?的?本內(nèi)容
- 核心信號(hào):
activated(int)
:當(dāng)??選擇了?個(gè)選項(xiàng)時(shí)發(fā)出activated(constQString&text)
:這個(gè)時(shí)候相當(dāng)于??點(diǎn)開下拉框,并且?標(biāo)劃過某個(gè)選項(xiàng),此時(shí)還沒有確認(rèn)做出選擇currentIndexChanged(int)
:當(dāng)前選項(xiàng)改變時(shí)發(fā)出currentIndexChanged(const QString& text)
:此時(shí)??已經(jīng)明確的選擇了?個(gè)選項(xiàng),??操作或者通過程序操作都會(huì)觸發(fā)這個(gè)信號(hào)editTextChanged(constQString& text)
:當(dāng)編輯框中的?本改變時(shí)發(fā)出editable
為true
時(shí)有效
4.Spin Box
QSpinBox
或者QDoubleSpinBox
表?**“微調(diào)框”**- 它是帶有按鈕的輸?框,可以?來輸?整數(shù)/浮點(diǎn)數(shù),通過點(diǎn)擊按鈕來修改數(shù)值??
- 關(guān)鍵屬性:
value
:存儲(chǔ)的數(shù)值singleStep
:每次調(diào)整的"步?",即按?次按鈕數(shù)據(jù)變化多少displayInteger
:數(shù)字的進(jìn)制- 例如:
displayInteger
設(shè)為10則是按照10進(jìn)制表?,設(shè)為2則為2進(jìn)制表?.
- 例如:
minimum
:最?值maximum
:最?值suffix
:后綴prefix
:前綴wrapping
:是否允許換?frame
:是否帶邊框alignment
:?字對(duì)??式.readOnly
:是否允許修改buttonSymbol
:按鈕上的圖標(biāo)UpDownArrows
:上下箭頭形式PlusMinus
:加減號(hào)形式NoButtons
:沒有按鈕
accelerated
:按下按鈕時(shí)是否為快速調(diào)整模式correctionMode
:輸?有誤時(shí)如何修正QAbstractSpinBox::CorrectToPreviousValue
- 如果??輸?了?個(gè)?效的值,那么
SpinBox
會(huì)恢復(fù)為上?個(gè)有效值 - 例如:如果
SpinBox
的初始值是1,??輸?了-1(?效),然后SpinBox
會(huì)恢復(fù)為1
- 如果??輸?了?個(gè)?效的值,那么
QAbstractSpinBox::CorrectToNearestValue
- 如果??輸?了?個(gè)?效的值,
SpinBox
會(huì)恢復(fù)為最接近的有效值 - 例如:如果
SpinBox
的初始值是1,??輸?了-1(?效),那么SpinBox
會(huì)恢復(fù)為0
- 如果??輸?了?個(gè)?效的值,
keyboardTrack
:是否開啟鍵盤跟蹤true
:每次在輸?框輸??個(gè)數(shù)字,都會(huì)觸發(fā)?次valueChanged()
和textChanged()
信號(hào)false
,只有在最終按下Enter或者輸?框失去焦點(diǎn),才會(huì)觸發(fā)valueChanged()
和textChanged()
信號(hào)
- 核心信號(hào):
textChanged(QString)
:微調(diào)框的?本發(fā)?改變時(shí)會(huì)觸發(fā)- 參數(shù)
QString
帶有前綴和后綴
- 參數(shù)
valueChanged(int)
:微調(diào)框的?本發(fā)?改變時(shí)會(huì)觸發(fā)- 參數(shù)
int
,表?當(dāng)前的數(shù)值
- 參數(shù)
5.Date Edit && Time Edit
QDateEdit
為?期的微調(diào)框QTimeEdit
為時(shí)間的微調(diào)框QDateTimeEdit
為時(shí)間?期的微調(diào)框- 這?個(gè)控件?法?常相似,以
QDateTimeEdit
為例進(jìn)?介紹 - 核心屬性:
dateTime
:時(shí)間?期的值,形如2000/1/1 0:00:00
date
:?jiǎn)渭?期的值,形如2000/1/1
time
:?jiǎn)渭儠r(shí)間的值,形如0:00:00
displayFormat
:時(shí)間?期格式,形如yyyy/M/d H:mm
minimumDateTime
:最?時(shí)間?期maximumDateTime
:最?時(shí)間?期timeSpec
:Qt::LocalTime
:顯?本地時(shí)間Qt::UTC
:顯?協(xié)調(diào)世界時(shí)(UTC)Qt::OffsetFromUTC
:顯?相對(duì)于UTC的偏移量(時(shí)差)
- 核心信號(hào):
dateChanged(QDate)
:?期改變時(shí)觸發(fā)timeChanged(QTime)
:時(shí)間改變時(shí)觸發(fā)dateTimeChanged(QDateTime)
:時(shí)間?期任意?個(gè)改變時(shí)觸發(fā)
- 示例:日期計(jì)算器
- 使?
daysTo()
可以計(jì)算兩個(gè)?期的天數(shù) - 使?
secsTo()
可以計(jì)算兩個(gè)時(shí)間的秒數(shù) - 通過
(seconds/3600)
換算成?時(shí)數(shù),再%24
得到零?個(gè)?時(shí) - 使?
QString::number
把整數(shù)轉(zhuǎn)成QString
進(jìn)?拼接
void Widget::on_pushButton_clicked() { QDateTime timeOld = ui->dateTimeEdit_old->dateTime(); QDateTime timeNew = ui->dateTimeEdit_new->dateTime(); // int days = timeOld.daysTo(timeNew); // 實(shí)際上這樣換算有bug int days = (timeOld.secsTo(timeNew) / 3600) / 24; int hours = (timeOld.secsTo(timeNew) / 3600) % 24; QString text = QString("間隔為") + QString::number(days) + QString("天 ") + QString::number(hours) + QString("個(gè)?時(shí)!"); ui->label->setText(text); }
- 使?
6.Dial
QDial
表??個(gè)旋鈕- 核心屬性:
value
:持有的數(shù)值minimum
:最?值maximum
:最?值singleStep
:按下?向鍵的時(shí)候改變的步?pageStep
:按下pageUp/pageDown
的時(shí)候改變的步?sliderPosition
:界?上旋鈕顯?的初始位置tracking
:外觀是否會(huì)跟蹤數(shù)值變化,默認(rèn)值為true
,?般不需要修改wrapping
:是否允許循環(huán)調(diào)整,即數(shù)值如果超過最?值,是否允許回到最?值- 即:調(diào)整過程能否"套圈"
notchesVisible
:是否顯?刻度線notchTarget
:刻度線之間的相對(duì)位置,數(shù)字越?,刻度線越稀疏
- 核心信號(hào):
valueChanged(int)
:數(shù)值改變時(shí)觸發(fā)rangeChanged(int, int)
:范圍變化時(shí)觸發(fā)
7.Slider
QSlider
表??個(gè)滑動(dòng)條QSlider
和QDial
都是繼承?QAbstractSlider
,因此?法上基本相同
- 核心屬性:
value
:持有的數(shù)值minimum
:最?值maximum
:最?值singleStep
:按下?向鍵的時(shí)候改變的步?pageStep
:按下pageUp/pageDown
的時(shí)候改變的步?sliderPosition
:界?上旋鈕顯?的初始位置tracking
:外觀是否會(huì)跟蹤數(shù)值變化,默認(rèn)值為true
,?般不需要修改orientation
:滑動(dòng)條的?向是?平還是垂直invertedAppearance
:是否要翻轉(zhuǎn)滑動(dòng)條的?向tickPosition
:刻度的位置tickInterval
:刻度的密集程度
- 核心信號(hào):
valueChanged(int)
:數(shù)值改變時(shí)觸發(fā)rangeChanged(int, int)
:范圍變化時(shí)觸發(fā)
- 示例:通過?定義快捷鍵調(diào)整滑動(dòng)條位置
- 使?
QShortCut
類設(shè)置快捷鍵 - 快捷鍵觸發(fā)時(shí),會(huì)發(fā)出
QShortcut::activated
信號(hào),連接到??寫的slot函數(shù)
QShortcut* shortCut1 = new QShortcut(this); shortCut1->setKey(QKeySequence("-")); connect(shortCut1, &QShortcut::activated, this, &Widget::subValue); QShortcut* shortCut2 = new QShortcut(this); shortCut2->setKey(QKeySequence("=")); connect(shortCut2, &QShortcut::activated, this, &Widget::addValue);
- 使?
總結(jié)
到此這篇關(guān)于Qt輸入類控件用法的文章就介紹到這了,更多相關(guān)Qt輸入類控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言動(dòng)態(tài)內(nèi)存泄露常見問題內(nèi)存分配改進(jìn)方法詳解
今天遇見了一道有意思的內(nèi)存泄露題目,特地分享給大家,相信屏幕前的你學(xué)習(xí)完一定有所收獲,預(yù)祝讀者學(xué)習(xí)愉快,多多進(jìn)步早日升職加薪2021-10-10詳解C++ 動(dòng)態(tài)內(nèi)存分配與命名空間
這篇文章主要介紹了詳解C++ 動(dòng)態(tài)內(nèi)存分配與命名空間,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08C++數(shù)據(jù)結(jié)構(gòu)之并查集詳解
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之并查集詳解,并查集是一種樹型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相交集合的合并及查詢問題,并查集的思想是用一個(gè)數(shù)組表示了整片森林,需要的朋友可以參考下2023-08-08C++?中的?JSON?序列化和反序列化及結(jié)構(gòu)體與枚舉類型的處理方法
在?C++?編程中,處理?JSON?數(shù)據(jù)是一項(xiàng)常見任務(wù),特別是在需要與其他系統(tǒng)或前端進(jìn)行數(shù)據(jù)交換時(shí),本文將詳細(xì)介紹如何使用?nlohmann::json?庫(kù)對(duì)結(jié)構(gòu)體和枚舉類型進(jìn)行序列化和反序列化,感興趣的朋友一起看看吧2024-11-11QT使用udp實(shí)現(xiàn)發(fā)送與接收?qǐng)D片
這篇文章主要為大家詳細(xì)介紹了QT如何使用udp協(xié)議實(shí)現(xiàn)發(fā)送與接收?qǐng)D片功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12C++實(shí)現(xiàn)數(shù)字轉(zhuǎn)換為十六進(jìn)制字符串的方法
這篇文章主要介紹了C++實(shí)現(xiàn)數(shù)字轉(zhuǎn)換為十六進(jìn)制字符串的方法,涉及C++操作數(shù)字與字符串轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-06-06