原本的想法是在LineEdit的textEdited()事件觸發(fā)時,如果輸入了無效的目錄名,則確認(rèn)按鈕無效,同時LineEdit的字的顏色為紅色,想了老半天要如何解決這個問題,如何判斷是否非法。都想到QString和字符串匹配上面去了。 后來偶然搜索到一個帖子,提到了QRegExpValidator這個東西。研究了一下,利用一個正則表達(dá)式就可以很方便的限制用戶的輸入,代碼如下:
Form的構(gòu)造函數(shù)中的代碼為:
QRegExp regExp("^[A-Za-z0-9_]+$"); //這里的意思是可以輸入包含大小寫字母,阿拉伯?dāng)?shù)字以及下劃線
nameLineEdit->setValidator(new QRegExpValidator(regExp, this));
后來把表達(dá)式成這樣了:
QRegExp regExp("\w[A-Za-z0-9\-]*");
這樣的話,目錄中除了第一個字符外可以包含小橫線“-”了,哦也~~
Form類中的一個槽函數(shù)為:
void NewForm::on_nameLineEdit_textEdited()
{
savePushBtn->setEnabled(nameLineEdit->hasAcceptableInput());
}
發(fā)現(xiàn),按鈕狀態(tài)觸發(fā)的功能完成了,而在nameLineEdit中輸入時,如果是星號啊,斜杠啊之類的直接就按了鍵也沒反應(yīng),即不會顯示到lineedit里面。這就無形之中將我那個想要把非法字符顯示為紅色的功能pass掉了,因?yàn)橐矝]有必要了。
無論如何解決了一個小問題卻學(xué)到了很多。
1,用QRegExpValidator很有用。它將我要做的字符串匹配啊那些操作全部省略了,而對于正則表達(dá)式的學(xué)習(xí)還應(yīng)該深入一下,因?yàn)槲疫€沒完全弄明白。Qt的資料真的很少,而里面內(nèi)容很多,不可能一下子從頭學(xué),只能隧道式學(xué)習(xí)了。
2,用on_objectName_SignalName()這個函數(shù)命名的槽函數(shù)非常方便。它相當(dāng)于自動會生成這段代碼:
connect ( objectName, SIGNAL(SignalName), this, SLOT(on_objectName_SignalName()))
這也是以前跟黃老師一起討論時,他老說on函數(shù)on函數(shù)的,我一時沒會過意,現(xiàn)在我明白了。
下面鏈接兩個網(wǎng)頁,我就不貼過來了,要查的話直接進(jìn)去看吧:
QT4對話框快速設(shè)計(jì):http://xuexg2000.blog.163.com/blog/static/139996409201032912432439/
(在這里我學(xué)會了on函數(shù))
QT正則表達(dá)式:http://jesserei.blog.163.com/blog/static/121411689201011210846198/
(在這里學(xué)會如何設(shè)置合法字符)