2015-10-01 9 views
-2

Мне нужно управлять входом, который предоставляется через QLineEdit. Предоставленный вход будет проверяться, чтобы увидеть, если он соответствует определенным критериям (например, отдельные буквы, цифры и символы ограничений)QLineEdit: управление проверкой ввода во время ввода данных

Задачи: процедура

  1. Эта проверка должна выполняться, когда пользователь вносит свой вклад ,
  2. Из-за несоответствия со списком ограничений сообщение должно появляться, чтобы уведомить пользователя.

Моя проблема: я вижу, как проверить текст после нажатия пользователем любой кнопки, пока моя цель - проверить ввод во время его предоставления и не ждать, пока нажимается кнопка.

#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("!§$%&/(){}[]=?\ß`*+~#'.,;[email protected]"); 
    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; 
     } 
    } 
} 
+0

Просьба предоставить нам ваши попытки до сих пор. –

ответ

0

Вы можете использовать QLineEdit::textEdited сигнал: создать слот для него, а затем поместить содержимое вашей функции MainWindow::on_pushButton_clicked в новой функции интервала (по умолчанию это будет MainWindow::on_lineEdit_textEdited(const QString &arg1)).

+0

На самом деле я обнаружил, что «QLineEdit :: textEdited» - это не слот класса QLineEdit. Спасибо за помощь в ее работе. –

+0

Да, вы правы, я смешал слова. Я обновил свой ответ. – agold

+0

в любом случае спасибо за помощь. –

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!"); 
}