我正在Android下部署Qt应用程序。如果QLineEdit
长度有限(使用setMaxLength
),则Android虚拟键盘会让我输入的字符数超过允许的数量,之后虚拟键盘关闭时QlineEdit
内容会被截断。
#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 bug:https://bugreports.qt.io/browse/QTBUG-61940
答案 0 :(得分:-1)
有不同的选择,第一个使用QLineEdit::setMaxLength功能。根据官方文件:
此属性包含文本的最大允许长度。如果 文本太长,在极限处被截断。
如果您在使用Android键盘时遇到问题,则可以使用QValidator使用给定QRegExp设置最大允许尺寸。为了您的目的,一个好的可能是:
/^(?=.{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信号并手动限制字符串。