控制LineEdit的输入,非法时确认按钮无效

控制LineEdit的输入,非法时确认按钮无效
原本的想法是在LineEdit的textEdited()事件触发时,如果输入了无效的目录名,则确认按钮无效,同时LineEdit的字的颜色为红色,想了老半天要如何解决这个问题,如何判断是否非法。都想到QString和字符串匹配上面去了。

       后来偶然搜索到一个帖子,提到了QRegExpValidator这个东西。研究了一下,利用一个正则表达式就可以很方便的限制用户的输入,代码如下:

Form的构造函数中的代码为:

QRegExp regExp("^[A-Za-z0-9_]+$");  //这里的意思是可以输入包含大小写字母,阿拉伯数字以及下划线
nameLineEdit->setValidator(new QRegExpValidator(regExp, this));

       后来把表达式成这样了:

QRegExp regExp("\w[A-Za-z0-9\-]*");

       这样的话,目录中除了第一个字符外可以包含小横线“-”了,哦也~~
Form类中的一个槽函数为:

void NewForm::on_nameLineEdit_textEdited()
{
    savePushBtn->setEnabled(nameLineEdit->hasAcceptableInput());
}

       发现,按钮状态触发的功能完成了,而在nameLineEdit中输入时,如果是星号啊,斜杠啊之类的直接就按了键也没反应,即不会显示到lineedit里面。这就无形之中将我那个想要把非法字符显示为红色的功能pass掉了,因为也没有必要了。

       无论如何解决了一个小问题却学到了很多。

1,用QRegExpValidator很有用。它将我要做的字符串匹配啊那些操作全部省略了,而对于正则表达式的学习还应该深入一下,因为我还没完全弄明白。Qt的资料真的很少,而里面内容很多,不可能一下子从头学,只能隧道式学习了。

2,用on_objectName_SignalName()这个函数命名的槽函数非常方便。它相当于自动会生成这段代码:

connect ( objectName, SIGNAL(SignalName), this, SLOT(on_objectName_SignalName()))

这也是以前跟黄老师一起讨论时,他老说on函数on函数的,我一时没会过意,现在我明白了。

       下面链接两个网页,我就不贴过来了,要查的话直接进去看吧:

QT4对话框快速设计:http://xuexg2000.blog.163.com/blog/static/139996409201032912432439/

(在这里我学会了on函数)

QT正则表达式:http://jesserei.blog.163.com/blog/static/121411689201011210846198/

(在这里学会如何设置合法字符)

你可能感兴趣的:(控制LineEdit的输入,非法时确认按钮无效)