自定义QLineEdit,限制n个字符,一个中文相当于两个字符
程序员文章站
2022-04-06 08:23:00
...
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QWidget>
#include<QLineEdit>
namespace Ui {
class LineEdit;
}
const unsigned DEFAULT_MAXCHARS = 10;
class LineEdit : public QLineEdit
{
Q_OBJECT
public:
explicit LineEdit(unsigned maxlen =DEFAULT_MAXCHARS, QWidget *parent = 0);
void setMaxCharLen(unsigned len);
~LineEdit();
private:
Ui::LineEdit *ui;
unsigned m_uiLen;
private slots:
void slotFilter(const QString &text);
};
#endif // LINEEDIT_H
#include "lineedit.h"
#include "ui_lineedit.h"
#include<QDebug>
#include<QRegExp>
#include<QKeyEvent>
LineEdit::LineEdit(unsigned maxlen, QWidget *parent) :
m_uiLen(maxlen),
QLineEdit(parent),
ui(new Ui::LineEdit)
{
ui->setupUi(this);
setMaxLength(m_uiLen);
connect(this,SIGNAL(textEdited(const QString &)),this,SLOT(slotFilter(const QString &)));
}
LineEdit::~LineEdit()
{
delete ui;
}
void LineEdit::slotFilter(const QString &text)
{
QString temp = text;
unsigned num = 0;
int i = 0;
for(;i< temp.size();i++)
{
if(temp.at(i) >= 0x4e00 && temp.at(i) <= 0x9fa5)
{
if(num >= m_uiLen-1) break;
num += 2;
}
else if(num < m_uiLen)
{
num += 1;
}
else{
break;
}
}
setText(temp.left(i));
}