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:00date:?jiǎn)渭?期的值,形如2000/1/1time:?jiǎn)渭儠r(shí)間的值,形如0:00:00displayFormat:時(shí)間?期格式,形如yyyy/M/d H:mmminimumDateTime:最?時(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語言動(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-08
C++數(shù)據(jù)結(jié)構(gòu)之并查集詳解
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之并查集詳解,并查集是一種樹型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相交集合的合并及查詢問題,并查集的思想是用一個(gè)數(shù)組表示了整片森林,需要的朋友可以參考下2023-08-08
C++?中的?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-11
QT使用udp實(shí)現(xiàn)發(fā)送與接收?qǐng)D片
這篇文章主要為大家詳細(xì)介紹了QT如何使用udp協(xié)議實(shí)現(xiàn)發(fā)送與接收?qǐng)D片功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C++實(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

