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; // 最大输入字符数 };