访问网站 过程,网页升级无法自动更新,免费源码下载,wordpress json 插件setMaxLength(int)只能用来限制输入的字符个数 QLineEdit *editor new QLineEdit(parent); editor-setMaxLength(32);
1、如果是单字节字符#xff0c;如数字#xff0c;字母等#xff0c;字符数正好等于字节数
2、如果是多字节字符#xff0c;UTF8编码时#xff0…setMaxLength(int)只能用来限制输入的字符个数 QLineEdit *editor new QLineEdit(parent); editor-setMaxLength(32);
1、如果是单字节字符如数字字母等字符数正好等于字节数
2、如果是多字节字符UTF8编码时汉字一般占用3个字节GBK编码时汉字占用2个字节。
UTF-8 编码简介 UTF-8 是一种变长编码可以表示 Unicode 字符集中的所有字符。UTF-8 中字符的长度可以从1到4个字节不等
单字节字符ASCII字符以 0xxxxxxx 开头。 多字节字符 第一个字节起始字节以 110xxxxx、1110xxxx 或 11110xxx 开头表示接下来还有多少个延续字节。 延续字节后续字节都以 10xxxxxx 开头。 有时候我们想根据字节数对输入框禁止截断超过32字节就不显示或者禁止输入
输入框内可以输入英文、数字和汉字以及其它字符
如果我们只设置setMaxLength(32)可以输入32个汉字32个汉字明显不等于32个字节 QString truncateToByteLimit(const QString text, int maxBytes)//对UTF8编码的汉字或者单字符截断
{QByteArray utf8Text text.toUtf8();if (utf8Text.size() maxBytes){return text;}// 截断到指定的最大字节数确保不破坏字符int byteCount 0;for (int i 0; i utf8Text.size(); i){byteCount;// 检查是否是多字节字符的开始并且是否已经达到了最大字节数,非单字节if ((utf8Text[i] 0xC0) ! 0x80 byteCount maxBytes (utf8Text[i] 0x80) ! 0){// 如果当前字节不是延续字节并且超过了最大字节数则在此处截断return QString::fromUtf8(utf8Text.left(i));}else if((utf8Text[i] 0xC0) 0x80 byteCount maxBytes)//延续字符{if((utf8Text[i-1] 0xC0) ! 0x80 i0 (utf8Text[i-1] 0x80) ! 0)//开始字符{return QString::fromUtf8(utf8Text.left(i-1));}else if( i0 (utf8Text[i-1] 0x80) 0)//单字符,这种情况可以不用判断{return QString::fromUtf8(utf8Text.left(i));}}else if((utf8Text[i] 0x80) 0 byteCount maxBytes)//单字符{return QString::fromUtf8(utf8Text.left(i));}}// 如果所有字符都符合限制返回原始文本return QString::fromUtf8(utf8Text);
} 使用绑定QLineEdit的信号textChanged()并在槽函数进行处理
QByteArray QString::toUtf8() const 返回的是字符串所占用的字节数 connect(lineEditor, QLineEdit::textChanged, [lineEditor](const QString text) {if (text.toUtf8().size() lineEditor-maxLength()) {// 如果超过限制截断文本QString truncatedUtf8 truncateToByteLimit(text,lineEditor-maxLength());lineEditor-setText(truncatedUtf8);}});