2017-07-11 44 views
0

我正在部署Android下的Qt應用程序。當QLineEdit長度有限(使用setMaxLength)時,Android虛擬鍵盤允許輸入超出允許的字符數,並且隨後虛擬鍵盤關閉時QlineEdit內容將被截斷。QLineEdit :: maxLength支持Android

#include <QApplication> 
#include <QMainWindow> 
#include <QVBoxLayout> 
#include <QLineEdit> 

int main(int argc, char* argv[]) 
{ 
    QApplication app(argc, argv);  

    QMainWindow wnd; 

    QLineEdit edit(&wnd); 
    edit.setMaxLength(10); 
    wnd.setCentralWidget(&edit); 

    wnd.show(); 

    return app.exec(); 
} 

有沒有辦法讓虛擬鍵盤處理這個限制不讓用戶輸入比允許的更多的字符?

注:創建QT錯誤:https://bugreports.qt.io/browse/QTBUG-61940

+0

我有類似QLineEdit的問題。所有進入lineEdit的文本都會自動變爲大寫。 – aghilpro

+0

你可以在事件QLineEdit文字改變的情況下獲得文本,並阻止用戶輸入更多的特定數量的字符,但這不是一個好的解決方案。 – aghilpro

+0

@aghilpro:不好的解決方案,但可以接受... – jpo38

回答

-1

有不同的選擇,第一個它的使用QLineEdit::setMaxLength功能。根據官方文件:

此屬性擁有文本的最大允許長度。如果 文本太長,則會在極限處截斷。

如果你有Android鍵盤問題,然後選擇,您可以通過使用與給定QRegExp一個QValidator設置允許的最大尺寸。你的目的是好的可能是:

/^(?=.{3,16}$)[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/ 

或最簡單的一個:

^\s*([^\s]\s*){0,400}$ 

當值{0,} 400定義你的字符串所允許的最大尺寸。例如:

QRegExp regexp("^\s*([^\s]\s*){0,400}$"); 
QRegExpValidator *validator = new QRegExpValidator(regexp, this); 
lineEdit->setValidator(validator); 

最後一個,儘量避免它,只是處理textChanged信號和手動限制的字符串。

+0

我懷疑這將由Android虛擬鍵盤處理。這將是相同的行爲,用戶將被允許進入任何他想要的內容,然後將在驗證後修改內容... – jpo38

+0

這不會阻止用戶在Android下輸入比預期更多的字符。它最終與'setMaxLength'具有相同的行爲 – jpo38