有时候我们希望在输入框中定义我们规定的输入方式,比如需要输入数字的而不能让用户输入字母的,需要用户刚好输入10位数的ID等,我们可以在Qt中定义一个正则的方法,这样用户就只能按规定的方式才能被接受。这是C++ GUI Qt4第二版第二章的一个例子。
下面是gotocelldialog.cpp内容
#include <QtGui>
#include "gotocelldialog.h"
GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent) { setupUi(this);//这个函数初始化窗口,还可以将符合on_objectName_signalName()命名习惯的的任意槽与相应的objectName_signalName()信号连接起来。
//这个地方就是connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(on_lineEdit_textChanged()));联系起来。
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
lineEdit->setValidator(new QRegExpValidator(regExp,this));
connect(okButton,SIGNAL(clicked()),SLOT(accept()));
connect(cancelButton,SLOT(reject()));
}
void GoToCellDialog::on_lineEdit_textChanged() { okButton->setEnabled(lineEdit->hasAcceptableInput());
}
可以看到里面的QRegExp,控制着用户第一个只能是字母(大小写均可),然后是1-9的一个数字,然后是可以重复0-2次的0-9的数字。其他方式的输入在lineEdit中都是看不到的。感觉挺实用。顺便附上其他两个文件中的内容。
//main.cpp
#include <QApplication>
#include "gotocelldialog.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
GoToCellDialog *dialog = new GoToCellDialog;
dialog->show();
return app.exec();
}
//gotocelldialog.h
#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H
#include <QDialog>
#include "ui_gotocelldialog.h"
class GoToCellDialog : public QDialog,public Ui::GoToCellDialog
{
Q_OBJECT
public:
GoToCellDialog(QWidget *parent = 0);
private slots:
void on_lineEdit_textChanged();
};
#endif