2016-10-02 122 views
0

我有一個QLineEditInputMask設置爲">AAAA90",也就是說,我希望文本正好由4個大寫Ascii字母和1-2個數字組成。但是,如果用戶鍵入「AA1」,則QLineEdit將顯示AA 1,即它將插入兩個空白並在第5個位置打印允許的「1」。我寧願在任何位置都想要使用非法字符的行爲,即如果用戶鍵入「AA%」,則光標停留在第三個位置並且不打印「%」字符。QLineEdit InputMask和空白插入

這是可能的QT5?

+0

那麼,前四個字母是否允許空格? – Mike

+1

這絕對有可能,請看['QValidator'](https://doc.qt.io/qt-5/qvalidator.html)。 – Mike

回答

1

感謝@Mike對QValidator尖,我結束了掛鉤一個驗證像

QRegExp rgx("[a-zA-Z]{4}\\d{1,2}"); 
QValidator *comValidator = new QRegExpValidator (rgx, this); 
comLineEdit->setValidator(comValidator); 

並與掛鉤textEdited

void MainWindow::comTextEdited(const QString &arg1) 
{ 
    qobject_cast<QLineEdit*>(sender())->setText(arg1.toUpper()); 
} 

到了第4個字符強制爲大寫。

0

請注意,雖然在GUI中插入了空格以提高可讀性,但輸入掩碼不會在返回的文本中插入空格(即返回值爲QLineEdit::text()方法)。

爲了更明確,輸入掩碼使QLineEdit S能夠工作覆蓋模式不插入模式。但設置QValidator離開QLineEdit工作在插入模式不變。

例如,如果您鍵入"AA3",GUI顯示"AA 3",但text()方法返回AA3。如果現在將光標移回第3位並鍵入"B",則GUI將顯示"AAB 3"(不是"AAB 3",因爲我們在覆蓋模式)和text()方法返回"AAB3"