原本的想法是在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/
(在这里学会如何设置合法字符)