1. 程式人生 > >Qt中正則表示式的使用

Qt中正則表示式的使用

今天的工作中,遇到一個需求,就是介面的一個對話方塊中需要填入需求的字串,因為如果填的字串是隨意的內容的話,下載到下位機上可能會使得下位機崩潰。因此我研究了一下Qt中的QLineEdit控制元件中使用正則表示式。首先查了一些文件,並且對此進行設定,發現只要新建一個QLineEdit後呼叫其中的QLineEdit::setValidator(const QValidator * v)即可。其中的QValidator派生了四個類QDoubleValidator, QIntValidator, QRegExpValidator, 和 QRegularExpressionValidator。根據多型直接傳入其子類QRegExpValidator

或者QRegularExpressionValidator即可進行正則表示式的輸入。其中QRegExpValidator構造時傳入的QRegExp類來進行正則表示式的構造。Qt5出來後推薦使用QRegularExpressionValidator傳入的引數QRegularExpression進行正則表示式的構造。

當然構造的方式我就不詳細說了,網上一搜有好多。這裡舉一個使用正則表示式限制QLineEdit的測試例子:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public
QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); public Q_SLOTS: void accept() override; private: Ui::Dialog *ui; }; #endif // DIALOG_H #include "dialog.h" #include "ui_dialog.h" #include <QDebug> #include <QMessageBox> Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new
Ui::Dialog) { ui->setupUi(this); ui->lineEdit_1->setValidator(new QRegExpValidator(QRegExp(tr("[0-9]+")),this)); //設定只能輸入數字 ui->lineEdit_2->setValidator(new QRegExpValidator(QRegExp(tr("[-]?[0-9]+,[0-9]+")),this)); //設定 } Dialog::~Dialog() { delete ui; } void Dialog::accept() { if(!QRegExp(tr("[0-9]+")).exactMatch(ui->lineEdit_1->text())) { QMessageBox temMB(QMessageBox::Warning, tr("警告"), tr("第一行輸入錯誤,預設輸入是1\n請問是否設定為預設值?"), QMessageBox::Yes | QMessageBox::No); temMB.setButtonText(QMessageBox::Yes,tr("是")); temMB.setButtonText(QMessageBox::No,tr("否")); if(temMB.exec() == QMessageBox::Yes) ui->lineEdit_1->setText(tr("1")); return; } if(!QRegExp(tr("[-]?[0-9]+,[0-9]+")).exactMatch(ui->lineEdit_2->text())) { QMessageBox temMB(QMessageBox::Warning, tr("警告"), tr("第二行輸入錯誤,預設輸入是1,1\n請問是否設定為預設值?"), QMessageBox::Yes | QMessageBox::No); temMB.setButtonText(QMessageBox::Yes,tr("是")); temMB.setButtonText(QMessageBox::No,tr("否")); if(temMB.exec() == QMessageBox::Yes) ui->lineEdit_2->setText(tr("1,1")); return; } qDebug()<<ui->lineEdit_1->text()<<'\n'<<ui->lineEdit_2->text(); QDialog::accept(); }

注意,我發現雖然設定了正真表示式後,QLineEdit只能保證輸入的時候可以按照其規則輸入,但是不能保證客戶使用的時候輸入完全,比如需要輸入座標(23,34),客戶可能沒有輸入逗號,還是可以按確定按鈕的,為了讓其完全有保證,必須在按下接受按鈕的時候再次檢驗,這是可以重寫QDialogaccept()函式,並在裡面再次使用正則表示式QRegExp類的exactMatch進行匹配來達到目的。