目錄
Line Edit
核心屬性
核心信號
正則表達式
示例:使用正則表達式驗證輸入框內容?
示例:切換輸入框密碼模式下的顯示狀態
Text Edit
核心屬性
核心信號
示例:獲取多行輸入框的內容同步顯示到label
示例:獲取文本的選中范圍
Combo Box
核心屬性
核心方法
核心信號
示例:通過讀取文件獲取選項內容?
QString和std::string相互轉換
Spin Box
QSpinBox關鍵屬性
核心信號
Date Edit & Time Edit
核心屬性
關于 本地時間(LocalTime) 和 協調世界時(UTC)
核心信號
QDateTime
示例:計算兩個日期的差值
Dial
核心屬性
核心信號
Slider
核心屬性?
核心信號
自定義快捷鍵 **
Line Edit
核心屬性
屬性 | 說明 |
---|---|
text | 輸?框中的?本 |
inputMask | 輸?內容格式約束 |
maxLength | 最??度 |
frame | 是否添加邊框 |
echoMode | 顯示方式.
|
cursorPosition | 光標所在位置 |
alignment | ?字對??式, 設置?平和垂直?向的對?. |
dragEnabled | 是否允許拖拽 |
readOnly | 是否是只讀的(不允許修改) |
placeHolderText | 當輸?框內容為空的時候, 顯?什么樣的提?信息 |
clearButtonEnabled | 是否會?動顯?出 "清除按鈕“ |
核心信號
屬性 | 說明 |
---|---|
void cursorPositionChanged(int old, int new) | 當?標移動時發出此信號,old為先前的位置,new為新位置 |
void editingFinished() | 當按返回或者回?鍵時,或者?編輯失去焦點時,發出此信號 |
void returnPressed() | 當返回或回?鍵按下時發出此信號. 如果設置了驗證器, 必須要驗證通過, 才能觸發. |
void selectionChanged() | 當選中的?本改變時,發出此信號。 |
void textChanged(const QString &text) | 當QLineEdit中的?本改變時,發出此信號,text是新的?本。 代碼對?本的修改能夠觸發這個信號 |
void textEdited(const QString &text)) | 當QLineEdit中的?本改變時,發出此信號,text是新的?本。 代碼對?本的修改不能觸發這個信號. |
為了驗證輸入框中的內容是否滿足規則,可以使用正則表達式。
正則表達式
正則表達式?檔正則表達式語法 | Microsoft Learn正則表達式在線?具:正則表達式語法測試工具 - 在線工具 (buyaocha.com)
示例:使用正則表達式驗證輸入框內容?
#include "widget.h"
#include "ui_widget.h"
#include <QRegExpValidator>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton->setEnabled(false);ui->lineEdit->setPlaceholderText("請輸入手機號");ui->lineEdit->setClearButtonEnabled(true);//這里只是注冊一個驗證器QRegExp regexp("^1\\d{10}$");ui->lineEdit->setValidator(new QRegExpValidator(regexp));}Widget::~Widget()
{delete ui;
}void Widget::on_lineEdit_textChanged(const QString &arg1)
{QString text=arg1;int pos=0;if(ui->lineEdit->validator()->validate(text,pos)==QValidator::Acceptable){//驗證通過ui->pushButton->setEnabled(true);}else{//驗證不通過ui->pushButton->setEnabled(false);}
}
示例:切換輸入框密碼模式下的顯示狀態
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setEchoMode(QLineEdit::Password);}Widget::~Widget()
{delete ui;
}void Widget::on_checkBox_toggled(bool checked)
{if(checked){ui->lineEdit->setEchoMode(QLineEdit::Normal);}else{ui->lineEdit->setEchoMode(QLineEdit::Password);}
}
Text Edit
與Line Edit不同的是,Text Edit表示多行輸入框,也是?個富?本 & markdown 編輯器,并且能在內容超出編輯框范圍時?動提供滾動條。
在Qt中表示多行輸入框有兩種:
QTextEdit | 不僅能表示純文本,還可以表示html和markdow |
QPlainTextEdit | 只能表示純文本 |
核心屬性
屬性 | 說明 |
---|---|
markdown | 輸?框內持有的內容. ?持 markdown 格式. 能夠?動的對markdown ?本進? 渲染成 html |
html | 輸?框內持有的內容. 可以?持?部分 html 標簽. 包括 img 和 table 等 |
placeHolderText | 輸?框為空時提?的內容 |
readOnly | 是否是只讀的 |
undoRedoEnable | 是否開啟 undo / redo 功能. 按下 ctrl + z 觸發 undo 撤銷 按下 ctrl + y 觸發 redo? 撤銷的撤銷 |
autoFormating | 開啟?動格式化. |
tabstopWidth | 按下縮進占多少空間 |
overwriteMode | 是否開啟覆蓋寫模式 |
acceptRichText | 是否接收富?本內容 |
verticalScrollBarPolicy | 垂直?向滾動條的出現策略
|
horizontalScrollBarPolicy | ?平?向滾動條的出現策略
|
核心信號
信號 | 說明 |
---|---|
textChanged() | ?本內容改變時觸發 |
selectionChanged() | 選中范圍改變時觸發 |
cursorPositionChanged() | 光標移動時觸發 |
undoAvailable(bool) | 可以進? undo 操作時觸發 |
redoAvailable(bool) | 可以進? redo 操作時觸發 |
copyAvaiable(bool) | ?本被選中/取消選中時觸發 |
示例:獲取多行輸入框的內容同步顯示到label
void Widget::on_textEdit_textChanged()
{QString text=ui->textEdit->toPlainText();ui->label->setText(text);
}
示例:獲取文本的選中范圍
Edit中有一個屬性
QTextCursor cursor = ui->textEdit->textCursor();
返回的QTextCursor對象描述的就是光標的一些情況
void Widget::on_textEdit_selectionChanged()
{QTextCursor cursor=ui->textEdit->textCursor();qDebug()<<"選中的文本是:"<<cursor.selectedText();
}
Combo Box
核心屬性
屬性 | 說明 |
---|---|
currentText | 當前選中的?本 |
currentIndex | 當前選中的條?下標 從 0 開始計算. 如果當前沒有條?被選中, 值為 -1 |
editable | 是否允許修改 設為 true 時, QComboBox 的?為就?常接近 QLineEdit , 也可以 設置 validator |
iconSize | 下拉框圖標 (?三?) 的?? |
maxCount | 最多允許有多少個條? |
核心方法
方法 | 說明 |
---|---|
addItem(const QString&) | 添加?個條? |
currentIndex() | 獲取當前條?的下標 從 0 開始計算. 如果當前沒有條?被選中, 值為 -1 |
currentText() | 獲取當前條?的?本內容 |
核心信號
方法 | 說明 |
---|---|
activated(int) activated(const QString & text) | 當??選擇了?個選項時發出. 這個時候相當于??點開下拉框, 并且?標劃過某個選項. 此時還沒有確認做出選擇. |
currentIndexChanged(int) currentIndexChanged(const QString & text) | 當前選項改變時發出. 此時??已經明確的選擇了?個選項. ??操作或者通過程序操作都會觸發這個信號 |
editTextChanged(const QString & text) | 當編輯框中的?本改變時發出 (editable 為 true 時有效) |
示例:通過讀取文件獲取選項內容?
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <fstream>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//?C:/Users/L/Desktop/config.txtstd::ifstream file("C:/Users/L/Desktop/config.txt");if(!file.is_open()){qDebug()<<"文件打開失敗";return;}std::string line;while(std::getline(file,line)){ui->comboBox->addItem(QString::fromStdString(line));}file.close();
}Widget::~Widget()
{delete ui;
}
QString和std::string相互轉換
std::string? 轉 QString
QString::fromStdString(line);
QString?轉?std::string
QString s;
std::string str=s.toStdString();
Spin Box

QSpinBox關鍵屬性
屬性 | 說明 |
---|---|
value | 存儲的數值 |
singleStep | 每次調整的 "步?". 按下?次按鈕數據變化多少 |
displayInteger | 數字的進制. 例如 displayInteger 設為 10, 則是按照 10 進制表?. 設為 2 則為 2 進制表? |
minimum | 最?值 |
maximum | 最?值 |
suffix | 后綴 |
prefix | 前綴 |
wrapping | 是否允許換? |
frame | 是否帶邊框 |
alignment | ?字對??式 |
readOnly | 是否允許修改 |
buttonSymbol | 按鈕上的圖標.
|
accelerated (加速的) | 按下按鈕時是否為快速調整模式 |
correctionMode | 輸?有誤時如何修正.
|
keyboardTrack | 是否開啟鍵盤跟蹤.
|
核心信號
信號 | 說明 |
---|---|
textChanged(QString) | 微調框的?本發?改變時會觸發. 參數 QString 帶有 前綴 和 后綴. |
valueChanged(int) | 微調框的?本發?改變時會觸發. 參數 int, 表?當前的數值 |
Date Edit & Time Edit
核心屬性
屬性 | 說明 |
---|---|
dateTime | 時間?期的值. 形如 2000/1/1 0:00:00 |
date | 單純?期的值. 形如 2001/1/1 |
time | 單純時間的值. 形如 0:00:00 |
displayFormat | 時間?期格式. 形如 yyyy/M/d H:mm
注意: 這?的格式化符號的含義, 不要記憶. 不同語?/庫的設定規則 是存在差異的. ?定是?的時候再去查. |
minimumDateTime | 最?時間?期 |
maximumDateTime | 最?時間?期 |
timeSpec |
|
關于 本地時間(LocalTime) 和 協調世界時(UTC)
UTC 時間是?個基于原?鐘的標準時間. 不受地球的?轉周期影響. 和格林威治時間 (GMT) 是 ?常接近的. 科學家會通過精密的設備來測量并維護.咱們的計算機內部使?的時間就是基于 UTC 時間.本地時間則是基于不同的時區, 對 UTC 時間做出了?些調整. ?如咱們使?的北京時間, 位于"東?區", 就需要在 UTC 時間基礎上 +8 個?時的時差
核心信號
信號 | 說明 |
---|---|
dateChanged(QDate) | ?期改變時觸發. |
timeChanged(QTime) | 時間改變時觸發. |
dateTimeChanged(QDateTime) | 時間?期任意?個改變時觸發. |
QDateTime
Qt中 QDateTime 提供了兩個函數:
daysTo :計算兩個時間的日期的差值
secsTo :計算兩個時間的秒數的差值
示例:計算兩個日期的差值
void Widget::on_pushButton_clicked()
{//1.獲取到這兩個輸入框之間的時間QDateTime timeold = ui->dateTimeEdit->dateTime();QDateTime timenew = ui->dateTimeEdit_2->dateTime();//2.計算日期的差值int seconds = timeold.secsTo(timenew);//3.把秒數換算int days = seconds/3600 /24;int hour = seconds/3600 %24;//4.顯示結果ui->label->setText(QString::number(days)+QString::number(hour));
}
這里不使用daysTo方法求兩個日期天數的差值,是因為daysTo在同一天時間到第二天0點之間會多算一天.
Dial
核心屬性
屬性 | 說明 |
---|---|
value | 持有的數值 |
minimum | 最?值 |
maximum | 最?值 |
singleStep | 按下?向鍵的時候改變的步? |
pageStep | 按下 pageUp / pageDown 的時候改變的步? |
sliderPosition | 界?上旋鈕顯?的 初始位置 |
tracking | 外觀是否會跟蹤數值變化. 默認值為 true. ?般不需要修改. |
wrapping | 是否允許循環調整. 即數值如果超過最?值, 是否允許回到最?值. (調整過程能否 "套圈") |
notchesVisible | 是否顯? 刻度線 |
notchTarget | 刻度線之間的相對位置. 數字越?, 刻度線越稀疏 |
核心信號
屬性 | 說明 |
---|---|
valueChanged(int) | 數值改變時觸發 |
rangeChanged(int, int) | 范圍變化時觸發 |
Slider
QSlider 和 QDial 都是繼承? QAbstractSlider , 因此?法上基本相同.
核心屬性?
屬性 | 說明 |
---|---|
value | 持有的數值. |
minimum | 最?值 |
maximum | 最?值 |
singleStep | 按下?向鍵的時候改變的步? |
pageStep | 按下 pageUp / pageDown 的時候改變的步? |
sliderPosition | 滑動條顯?的 初始位置 |
tracking | 外觀是否會跟蹤數值變化. 默認值為 true. ?般不需要修改. |
orientation | 滑動條的?向是?平還是垂直 |
invertedAppearance | 是否要翻轉滑動條的?向 |
tickPosition | 刻度的位置 |
tickInterval | 刻度的密集程度 |
核心信號
屬性 | 說明 |
---|---|
valueChanged(int) | 數值改變時觸發 |
rangeChanged(int, int) | 范圍變化時觸發 |
自定義快捷鍵 **
滑動條本身可以通過方向鍵和pageUp和pageDown操作,但是我們也可以通過slot來自定義快捷鍵,
代碼示例:
#include "widget.h"
#include "ui_widget.h"
#include <QShortcut>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//創建快捷鍵QShortcut* shortCut = new QShortcut(this);shortCut->setKey(QKeySequence("="));//使用信號槽,感知到快捷鍵被按下connect(shortCut,&QShortcut::activated,this,&Widget::subValue);
}Widget::~Widget()
{delete ui;
}void Widget::subValue()
{//獲取當前值int value = ui->horizontalSlider->value();if(value >= ui->horizontalSlider->maximum()){return;}ui->horizontalSlider->setValue(value+5);
}