我需要控制通过QLineEdit
提供的输入。将检查提供的输入以查看它是否满足特定标准(即特定字母,数字和符号约束)
任务:
我的问题:我只能在用户按下任何按钮后查看如何检查文本,而我的目标是在提供输入时检查输入,而不必等到按下按钮。
#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;
}
}
}
答案 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!");
}