我正在Android下部署一个Qt应用程序。当QLineEdit长度受限时(使用setMaxLength),Android virutal键盘允许我输入超过允许的字符,稍后当关闭虚拟键盘时,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
发布于 2017-07-11 17:45:15
有不同的选择,第一个选择是使用QLineEdit::setMaxLength函数。根据官方文件:
此属性保存文本的最大允许长度。如果文本太长,将在限制处截断。
如果你对安卓键盘有问题,那么另一种选择是,你可以通过对给定的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信号并手动限制字符串。
https://stackoverflow.com/questions/45030312
复制相似问题