QTextEdit是没有可以直接调用的成员函数用来设置可输入字节数的最大限制。
这边是通过信号textChanged来实时监控输入,从而控制输入的。
实现方式如下:
1。定义自己的处理槽slotTextChanged()
2。connect槽slotTextChanged和信号editChanged。
3。实现slotTextChanged如下:
QString textContent = this->toPlainText();
int length = textContent.count();
int maxLength = maxLen; // 最大字符数
if(length > maxLength)
{
int position = this->textCursor().position();
QTextCursor textCursor = this->textCursor();
textContent.remove(position - (length - maxLength), length - maxLength);
this->setText(textContent);
textCursor.setPosition(position - (length - maxLength));
this->setTextCursor(textCursor);
}
尝试运行输入,我限制了最大10字节,确实只能输入10个字节。
源码:
// edit_message.cpp
MsgTextEdit::MsgTextEdit(QWidget *parent) : QTextEdit(parent) {
#ifdef im_support
connect(this, SIGNAL(msg_clicked(int &, int &)), keyBoard, SLOT(cinputline_im_clicked(int &, int &)));
#endif
connect(this, SIGNAL(textChanged()), this, SLOT(textChanged()));
}
MsgTextEdit::~MsgTextEdit() {
}
void MsgTextEdit::textChanged() {
QString textContent = this->toPlainText();
int length = textContent.count();
int maxLength = this->getMaxLength(); // 最大字符数
if(length > maxLength) {
int position = this->textCursor().position();
QTextCursor textCursor = this->textCursor();
textContent.remove(position-(length-maxLength), length-maxLength);
this->setText(textContent);
textCursor.setPosition(position-(length-maxLength));
this->setTextCursor(textCursor);
}
}
void MsgTextEdit::setMaxLength(int maxLength) {
this->maxLength = maxLength;
}
int MsgTextEdit::getMaxLength() {
return this->maxLength;
}
void MsgTextEdit::mousePressEvent(QMouseEvent *event) {
QTextEdit::mousePressEvent(event);
// 第一个参数表表示坐标Y轴坐标,0 表示软键盘始终显示在最下方
// 第二个参数表示默认显示软键盘类型,0表示字母
int globalY = 0;
int defaultTextType = 0;
emit msg_clicked(globalY, defaultTextType);
}
// 不允许鼠标选中一段文本进行拖拽等等鼠标移动相关的事件
void MsgTextEdit::mouseMoveEvent(QMouseEvent *) {
}
//edit_message.h
// 编辑留言区域
class MsgTextEdit : public QTextEdit {
Q_OBJECT
public:
MsgTextEdit(QWidget *parent = 0);
~MsgTextEdit();
void setMaxLength(int maxLength);
int getMaxLength();
private slots:
void textChanged();
// 点击编辑发送留言内容界面
signals:
void msg_clicked(int &globalY, int &defaultTextType);
protected:
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *e);
private:
int maxLength; // 最大输入字符数
};