Qt輸入類(lèi)控件用法超詳細(xì)講解
1.Line Edit
QLineEdit?來(lái)表?單?輸?框,可以輸??段?本,但是不能換?核心屬性:
text:輸入框中的文本inputMask:輸入內(nèi)容格式約束inputMask只能進(jìn)?簡(jiǎn)單的輸?格式校驗(yàn)- 實(shí)際開(kāi)發(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)證通過(guò),才能觸發(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:是否開(kāi)啟undo/redo功能- 按下
Ctrl + z觸發(fā)undo - 按下
Ctrl + y觸發(fā)redo
- 按下
autoFormating:開(kāi)啟自動(dòng)格式化tabstopWidth:按下縮進(jìn)占多少控件overwriteMode:是否開(kāi)啟覆蓋寫(xiě)模式- 對(duì)應(yīng)鍵盤(pán)上
insert鍵開(kāi)啟的功能
- 對(duì)應(yīng)鍵盤(pán)上
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開(kāi)始計(jì)算
- 如果當(dāng)前沒(méi)有條?被選中,值為-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開(kāi)始計(jì)算
- 如果當(dāng)前沒(méi)有條?被選中,值為-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)開(kāi)下拉框,并且?標(biāo)劃過(guò)某個(gè)選項(xiàng),此時(shí)還沒(méi)有確認(rèn)做出選擇currentIndexChanged(int):當(dāng)前選項(xiàng)改變時(shí)發(fā)出currentIndexChanged(const QString& text):此時(shí)??已經(jīng)明確的選擇了?個(gè)選項(xiàng),??操作或者通過(guò)程序操作都會(huì)觸發(fā)這個(gè)信號(hào)editTextChanged(constQString& text):當(dāng)編輯框中的?本改變時(shí)發(fā)出editable為true時(shí)有效
4.Spin Box
QSpinBox或者QDoubleSpinBox表?**“微調(diào)框”**- 它是帶有按鈕的輸?框,可以?來(lái)輸?整數(shù)/浮點(diǎn)數(shù),通過(guò)點(diǎn)擊按鈕來(lái)修改數(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:沒(méi)有按鈕
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:是否開(kāi)啟鍵盤(pán)跟蹤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ù) - 通過(guò)
(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ù)值如果超過(guò)最?值,是否允許回到最?值- 即:調(diào)整過(guò)程能否"套圈"
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ā)
- 示例:通過(guò)?定義快捷鍵調(diào)整滑動(dòng)條位置
- 使?
QShortCut類(lèi)設(shè)置快捷鍵 - 快捷鍵觸發(fā)時(shí),會(huì)發(fā)出
QShortcut::activated信號(hào),連接到??寫(xiě)的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輸入類(lèi)控件用法的文章就介紹到這了,更多相關(guān)Qt輸入類(lèi)控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)三角函數(shù)表
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言三角函數(shù)表,打印出相對(duì)應(yīng)的三角函數(shù)值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
C++標(biāo)準(zhǔn)模板庫(kù)vector的常用操作
今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫(kù)vector的常用操作,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Qt實(shí)現(xiàn)編寫(xiě)SMTP客戶(hù)端的示例詳解
這篇文章主要介紹了如何通過(guò)Qt實(shí)現(xiàn)編寫(xiě)SMTP客戶(hù)端,可以實(shí)現(xiàn)通過(guò)SMTP發(fā)送電子郵件(有文本,html,附件,內(nèi)聯(lián)文件等的MIME)。并支持SSL和SMTP身份驗(yàn)證,感興趣的可以學(xué)習(xí)一下2022-11-11
C++遞歸與迭代兩種編程范式的對(duì)比與實(shí)踐應(yīng)用
遞歸(Recursion)是指函數(shù)通過(guò)調(diào)用自身來(lái)解決問(wèn)題的一種方法而迭代 (Iteration)是通過(guò)循環(huán)結(jié)構(gòu)(如 for、while)重復(fù)執(zhí)行一段代碼來(lái)解決問(wèn)題的方法,本文給大家介紹C++遞歸與迭代兩種編程范式的對(duì)比與實(shí)踐應(yīng)用,感興趣的朋友跟隨小編一起看看吧2025-10-10
c++實(shí)現(xiàn)strcat字符串連接庫(kù)函數(shù)的方法詳解
本篇文章是對(duì)使用c++實(shí)現(xiàn)strcat字符串連接庫(kù)函數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++運(yùn)行時(shí)獲取類(lèi)型信息的type_info類(lèi)與bad_typeid異常
這篇文章主要介紹了C++運(yùn)行時(shí)獲取類(lèi)型信息的type_info類(lèi)與bad_typeid異常,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01

