QLineEdit:在提供输入时控制输入验证

时间:2015-10-01 13:11:45

标签: qt qlineedit

我需要控制通过QLineEdit提供的输入。将检查提供的输入以查看它是否满足特定标准(即特定字母,数字和符号约束)

任务:

  1. 当用户提供输入时,必须执行此检查过程。
  2. 由于与约束列表不匹配,应弹出一条消息通知用户。
  3. 我的问题:我只能在用户按下任何按钮后查看如何检查文本,而我的目标是在提供输入时检查输入,而不必等到按下按钮。

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QString>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    
    
    
    #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::on_pushButton_clicked()
    {
        QString reg_exp("!§$%&/(){}[]=?\ß`*+~#'.,;-@");
        int flag = 0;
    
        QString str = ui->lineEdit->text();
    
    
        for(int i = 0; i < str.length(); ++i)
        {
             for(int j = 0; j < reg_exp.length(); ++j )
             {
                  if(str[i] == reg_exp[j])
                  flag = 1;
             }
             if (flag == 1)
             {
                QMessageBox::warning(this,"Check","Its a mismatch!");
                 break;
             }
        }
    }
    

2 个答案:

答案 0 :(得分:0)

您可以使用QLineEdit::textEdited信号:为其创建一个插槽,然后将函数MainWindow::on_pushButton_clicked的内容放入新的插槽函数中(默认情况下为MainWindow::on_lineEdit_textEdited(const QString &arg1)

答案 1 :(得分:0)

这是完成的代码,但是在一个非常简单的版本中。我没有使用任何正则表达式验证。

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();

    private slots:
        void on_lineEdit_textEdited(const QString &str);

    private:
        Ui::MainWindow *ui;
    };

    #endif // MAINWINDOW_H

    #include "mainwindow.h"
    #include "ui_mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(ui->lineEdit,static_cast<void (QLineEdit::*)(const QString&)>(&QLineEdit::textEdited),this,&MainWindow::on_lineEdit_textEdited);
    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }

    void MainWindow::on_lineEdit_textEdited(const QString &str)
{
    int flag = 0;

    for(int i = 0; i < str.length(); ++i)
    {
        if((str[i] >= 'A') && (str[i] <= 'Z') || (str[i] >= 'a') && (str[i] <= 'z') || (str[i] == '_') || (str[i] >= '0') && (str[i] <= '9') )
          {
            ui->lineEdit->setStyleSheet("QLineEdit{border: 2px solid green}");

          }
        else
        {
            ui->lineEdit->setStyleSheet("QLineEdit{border: 2px solid red}");
            flag = 1;

            break;
        }
    }

    if(flag == 1)
        QMessageBox::warning(this,"Check","Wrong Input!");
}