C++ Qt開發(fā)之LineEdit單行輸入組件的用法詳解
在Qt中,QLineEdit是一個用于輸入單行文本的控件,它提供了一個允許用戶輸入和編輯文本的文本框。該組件是Qt的基礎控件之一,常用于獲取用戶的輸入,例如用戶名、密碼、搜索關鍵字等。是構建用戶交互界面的基礎組件之一,通常與其他控件一起使用,例如按鈕、標簽等,以構建完整的用戶輸入界面。
以下是QLineEdit的一些常用方法和屬性配置,以表格形式進行說明:
方法名 | 描述 |
---|---|
QLineEdit() | 構造函數(shù),創(chuàng)建一個空的LineEdit。 |
clear() | 清空LineEdit中的文本。 |
setText(const QString &) | 設置LineEdit的文本內(nèi)容。 |
text() const | 獲取LineEdit的當前文本內(nèi)容。 |
setPlaceholderText(const QString &) | 設置占位文本,顯示在LineEdit中,提供用戶輸入提示。 |
placeholderText() const | 獲取占位文本。 |
setMaxLength(int) | 設置最大輸入長度。 |
maxLength() const | 獲取最大輸入長度。 |
setReadOnly(bool) | 設置LineEdit為只讀狀態(tài),用戶無法編輯。 |
isReadOnly() const | 檢查LineEdit是否為只讀狀態(tài)。 |
setEchoMode(QLineEdit::EchoMode) | 設置回顯模式,用于處理密碼等敏感信息的顯示。 |
echoMode() const | 獲取當前的回顯模式。 |
setValidator(QValidator *) | 設置輸入驗證器,用于限制輸入的內(nèi)容。 |
validator() const | 獲取當前的輸入驗證器。 |
setInputMask(const QString &) | 設置輸入掩碼,限制輸入的格式。 |
inputMask() const | 獲取當前的輸入掩碼。 |
undo() | 撤銷上一次操作。 |
redo() | 重做上一次撤銷的操作。 |
cut() | 剪切當前選中的文本。 |
copy() | 復制當前選中的文本。 |
paste() | 粘貼剪切板的內(nèi)容。 |
selectAll() | 選中LineEdit中的所有文本。 |
deselect() | 取消文本的選擇狀態(tài)。 |
這些方法提供了QLineEdit
的基本功能,包括文本的設置、獲取、清空,以及一些編輯和格式化的操作。具體使用時可以根據(jù)需求選擇合適的方法。
1 使用輸入框
首先實現(xiàn)一個簡單的輸入框案例,首先需要構建一個如下圖所示的窗體布局,在布局中單行輸入框LineEdit()
組件用來輸入一行文本內(nèi)容,Label()
標簽用于顯示文本信息,GroupBox()
組件用來實現(xiàn)分組顯示,PushButton()
用于增加按鈕的點擊事件,通過四者配合實現(xiàn)兩個簡單的數(shù)值轉換器。
在代碼是線上我們分別對兩個按鈕增加觸發(fā)事件,第一個按鈕用于實現(xiàn)乘法計算器功能,在代碼中判斷編輯框是否為空,不為空則計算,第二個按鈕觸發(fā)進制轉換事件,完整代碼如下所示;
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 設置計算和編輯框不可修改 ui->lineEdit_hex->setEnabled(false); ui->lineEdit_bin->setEnabled(false); } MainWindow::~MainWindow() { delete ui; } // 當點擊計算按鈕后完成計算 void MainWindow::on_pushButton_clicked() { // 得到兩個編輯框的數(shù)據(jù) QString String_total; QString Number_One = ui->lineEdit_A->text(); QString Number_Two = ui->lineEdit_B->text(); // 判斷是否為空 if(Number_One.length() == 0 || Number_Two.length() == 0) { ui->label_Sum->setText("參數(shù)不能為空"); } else { // 類型轉換并賦值 int number_int = Number_One.toInt(); float number_float = Number_Two.toFloat(); // 計算結果并放入到第三個編輯框中 float total = number_int * number_float; // 將浮點數(shù)轉換為字符串 String_total = String_total.sprintf("%.2f",total); ui->label_Sum->setText(String_total); } } // 當點擊進制轉換按鈕后觸發(fā)事件 void MainWindow::on_pushButton_2_clicked() { // 得到編輯框字符串 QString str = ui->lineEdit_C->text(); // 判斷是否為空 if(str.length() == 0 || str.length() == 0) { ui->label_Sum->setText("參數(shù)不能為空"); } else { // 轉換為整數(shù) int value = str.toUInt(); // 轉十六進制 str = str.setNum(value,16); // 轉為16進制 str = str.toUpper(); // 變?yōu)榇髮? ui->lineEdit_hex->setText(str); // 設置hex編輯框 // 轉二進制 str = str.setNum(value,2); // 第一種方式轉換 str = QString::number(value,2); // 第二種方式轉換 ui->lineEdit_bin->setText(str); // 設置bin編輯框 } }
運行后讀者可自行觀察輸出效果,如下圖;
2 信息提示框
在Qt中對話框分為兩種形式,一種是標準對話框,另一種則是自定義對話框,在開發(fā)過程中標準對話框使用是最多的,標準對話框一般包括 QMessageBox
、QInputDialog
、QFileDialog
這幾種,為了后續(xù)文章的需要我們先來展示QMessageBox
的特性,QMessageBox
是 Qt 中用于顯示消息框的類,提供了一種簡單的方式來向用戶顯示信息、詢問問題或警告。
以下是 QMessageBox
的一些主要特點和用法:
- 消息框類型:
QMessageBox
支持不同類型的消息框,包括信息框、警告框、錯誤框、提問框等,以滿足不同場景下的需求。 - 按鈕配置: 可以自定義消息框中顯示的按鈕,如"確定"、“取消”、“是”、"否"等,也可以使用默認的按鈕配置。
- 圖標設置: 可以為消息框設置不同的圖標,用于表示消息的重要性或類型,如信息、警告、錯誤等。
- 標準按鈕和返回值:
QMessageBox
提供了一組標準按鈕,用戶可以選擇,每個按鈕都對應一個返回值,便于判斷用戶的選擇。 - 詳細信息和幫助: 可以設置消息框的詳細信息和幫助信息,以提供更多上下文或幫助用戶理解消息。
- 默認按鈕: 可以指定消息框中的默認按鈕,用戶可以通過回車鍵觸發(fā)默認按鈕。
首先我們以消息類型為例,來概述一下Qt中所支持的類型,以下是一些主要的消息框類型:
QMessageBox::Information
(信息框) 顯示一般性的信息,用于向用戶傳遞一般性的消息。QMessageBox::Warning
(警告框) 用于向用戶傳遞警告信息,表示可能的問題或需要用戶注意的情況。QMessageBox::Critical
(錯誤框) 顯示嚴重錯誤的消息框,用于向用戶傳遞需要立即處理的錯誤信息。QMessageBox::Question
(提問框) 通常用于詢問用戶一個問題,用戶可以選擇"是"、“否”、"取消"等答案。- 自定義圖標類型
- 除了上述預定義的幾種類型,
QMessageBox
還支持通過QMessageBox::setIcon()
方法設置自定義圖標,以滿足特定需求。
- 除了上述預定義的幾種類型,
該組件的使用同樣需要提前導入#include <QMessageBox>
庫,以下是QMessageBox
類的一些常用方法,說明和概述:
方法 | 描述 |
---|---|
QMessageBox::information() | 顯示信息框,包含圖標、標題和文本信息。 |
QMessageBox::warning() | 顯示警告框,包含圖標、標題和警告文本。 |
QMessageBox::critical() | 顯示錯誤框,包含圖標、標題和錯誤文本。 |
QMessageBox::question() | 顯示提問框,包含圖標、標題和問題文本,通常有"是"、"否"按鈕。 |
QMessageBox::about() | 顯示關于框,包含圖標、標題和關于文本。 |
QMessageBox::aboutQt() | 顯示關于Qt框,包含圖標、標題和關于Qt文本。 |
QMessageBox::setWindowTitle() | 設置消息框的標題。 |
QMessageBox::setText() | 設置消息框的主要文本。 |
QMessageBox::setInformativeText() | 設置消息框的附加信息。 |
QMessageBox::setIcon() | 設置消息框的圖標類型。 |
QMessageBox::setStandardButtons() | 設置消息框的標準按鈕集合,如確定、取消等。 |
QMessageBox::setDefaultButton() | 設置消息框中默認的按鈕,按下 Enter 鍵會觸發(fā)默認按鈕。 |
QMessageBox::exec() | 執(zhí)行消息框并等待用戶的響應,返回用戶選擇的按鈕。 |
QMessageBox::button() | 獲取消息框中指定類型的按鈕,用于自定義按鈕的屬性和行為。 |
QMessageBox::addButton() | 向消息框添加自定義按鈕。 |
QMessageBox::removeButton() | 從消息框移除自定義按鈕。 |
QMessageBox::setDefaultButton() | 設置默認按鈕,按下 Enter 鍵觸發(fā)默認按鈕。 |
首先我們來實現(xiàn)一個簡單的按鈕提示框,其核心代碼如下所示,當用戶點擊了pushButton
按鈕時,則會觸發(fā)on_pushButton_clicked
按鈕事件,此時根據(jù)提示彈出不同的對話框信息;
#include <QString> #include <QMessageBox> void MainWindow::on_pushButton_clicked() { QMessageBox msgBox; msgBox.setWindowTitle("提示框"); msgBox.setText("你好lyshark,這是一個信息框"); msgBox.setIcon(QMessageBox::Information); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); int ret = msgBox.exec(); if (ret == QMessageBox::Ok) { // 用戶點擊了確定按鈕 QMessageBox::information(nullptr, "信息", "用戶點擊了確定按鈕", QMessageBox::Ok); } else if (ret == QMessageBox::Cancel) { // 用戶點擊了取消按鈕 QMessageBox::warning(nullptr, "警告", "用戶點擊了取消按鈕", QMessageBox::Ok); } }
如下圖,當用戶點擊代碼提示框按鈕時,會自動彈出對話框,當用戶選擇不同的按鈕則又會再次彈出令一個不同的對話框;
接著我們來擴展一個非常實用的案例技巧,在某些時候用戶點擊右上角的關閉按鈕時會自動終止程序的執(zhí)行,有時我們需要提示用戶是否關閉,這時就可以使用QCloseEvent
組件實現(xiàn)事件通知機制,當用戶點擊關閉按鈕時則會提示是否關閉,如果是則關閉,否則繼續(xù)執(zhí)行。
需要注意的是,使用該組件時,需要在mainwindow.h
頭文件中引入#include <QCloseEvent
組件,并在public:
中定義void closeEvent(QCloseEvent *event);
聲明其存在,最后要在mainwindow.cpp
中實現(xiàn)該功能,核心代碼如下;
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // 窗口關閉時詢問是否退出 void MainWindow::closeEvent(QCloseEvent *event) { QMessageBox::StandardButton result=QMessageBox::question(this, "確認", "確定要退出本程序嗎?", QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel, QMessageBox::No); if (result==QMessageBox::Yes) event->accept(); else event->ignore(); }
至此,當程序關閉按鈕被點擊時則不會直接關閉,而是會先提示是否關閉讓用戶選擇,如下圖;
3 賬號密碼登錄
為了能靈活的展示lineEdit
組件與PushButton
的靈活運用,本次將實現(xiàn)一個具有記住密碼的用戶登錄程序,首先在布局中需要兩個label
標簽,兩個lineEdit
編輯框,以及一個checkBox
單選框,和PushButton
登錄按鈕,需要注意登錄密碼一般時隱藏模式所以需要設置setEchoMode(QLineEdit::Password)
為密碼輸入模式,該程序的整體UI
布局如下圖所示;
在實現(xiàn)賬號密碼驗證之前,我們還需要增加密碼的加密、讀入、和寫入功能,此時需要使用QCryptographicHash
模塊,該模塊是Qt中提供的用于計算哈希值的類,屬于Qt的核心模塊。哈希函數(shù)將輸入數(shù)據(jù)映射為固定長度的哈希值,通常用于安全領域、數(shù)據(jù)完整性驗證等方面。QCryptographicHash
支持多種哈希算法,如MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512等。
首先我們在mainwindow.h
中分別增加三個函數(shù)的定義部分,其中encrypt
用于接收一個字符串并輸出該字符串的Hash
值,ReadString
函數(shù)用于在注冊表內(nèi)讀入賬號密碼信息,WriteString
則用于寫出賬號密碼信息到注冊表內(nèi),其核心代碼如下所示;
#include <QString> #include <QMessageBox> #include <QByteArray> #include <QSettings> #include <QCryptographicHash> // 初始化用戶名 QString m_user="lyshark"; // 初始化密碼 QString m_pswd="12345"; // 試錯次數(shù) int m_tryCount=0; // 字符串MD5算法加密 QString MainWindow::encrypt(const QString &str) { QByteArray btArray; btArray.append(str); // 加入原始字符串 QCryptographicHash hash(QCryptographicHash::Md5); // Md5加密算法 hash.addData(btArray); // 添加數(shù)據(jù)到加密哈希值 QByteArray resultArray =hash.result(); // 返回最終的哈希值 QString md5 =resultArray.toHex(); // 轉換為16進制字符串 return md5; } // 讀取用戶名密碼 void MainWindow::ReadString() { // 注冊表字段 QString organization="UserDataBase"; // 注冊表位置HKEY_CURRENT_USER/Software/UserDataBase/onley QString appName="onley"; // 創(chuàng)建key-value QSettings settings(organization,appName); // 讀取 saved鍵的值 bool saved=settings.value("saved",false).toBool(); // 讀取 Username 鍵的值,缺省為lyshark m_user=settings.value("Username", "lyshark").toString(); // 缺省密碼 12345 加密后的數(shù)據(jù) QString defaultPSWD=encrypt("12345"); // 讀取PSWD鍵的值 m_pswd=settings.value("PSWD",defaultPSWD).toString(); if (saved) { ui->lineEdit_username->setText(m_user); } ui->checkBox->setChecked(saved); } // 保存用戶名密碼設置 void MainWindow::WriteString() { // 注冊表鍵組 QSettings settings("UserDataBase","onley"); // 用戶名 settings.setValue("Username",m_user); // 經(jīng)過加密的密碼 settings.setValue("PSWD",m_pswd); settings.setValue("saved",ui->checkBox->isChecked()); }
我們看下主驗證程序的流程,在主程序中我們調用ReadString
讀入賬號密碼到內(nèi)存,當按鈕被點擊后觸發(fā)on_pushButton_clicked()
子程序,并實現(xiàn)對賬號密碼的登錄驗證功能,實現(xiàn)代碼如下所示;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 設置主窗體不可調節(jié) setFixedSize(this->width(), this->height()); //設置密碼輸入模式* ui->lineEdit_password->setEchoMode(QLineEdit::Password); // 讀入數(shù)據(jù)到變量內(nèi) ReadString(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { // 輸入用戶名 + 密碼 QString user=ui->lineEdit_username->text().trimmed(); QString pswd=ui->lineEdit_password->text().trimmed(); // 對輸入密碼進行加密 QString encrptPSWD=encrypt(pswd); // 如果用戶名和密碼正確 if ((user==m_user)&&(encrptPSWD==m_pswd)) { WriteString(); QMessageBox::critical(this,"成功","已登錄"); } else { // 錯誤次數(shù) m_tryCount++; if (m_tryCount>3) { QMessageBox::critical(this, "錯誤", "輸入錯誤次數(shù)太多,強行退出"); this->close(); } else { QMessageBox::warning(this, "錯誤提示", "用戶名或密碼錯誤"); } } }
程序運行后讀者可以輸入默認的賬號lyshark
及密碼12345
默認當?shù)卿洺晒髣t提示已登錄彈窗,如果用戶勾選了記住密碼,則下次會自動輸入賬號密碼,如下圖;
以上就是C++ Qt開發(fā)之LineEdit單行輸入組件的用法詳解的詳細內(nèi)容,更多關于C++ Qt LineEdit單行輸入組件的資料請關注腳本之家其它相關文章!
相關文章
在std::thread中創(chuàng)建并管理QEventLoop的全面解析
QEventLoop的工作原理可以簡單地理解為一個無限循環(huán),它會不斷地檢查是否有新的事件需要處理,如果有,就將事件從事件隊列中取出,然后找到相應的事件處理器進行處理,這篇文章主要介紹了在std::thread中創(chuàng)建并管理QEventLoop的全面指南,需要的朋友可以參考下2023-06-06