QTextEdit设置最大可输入字符

 

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

 

你可能感兴趣的:(QTextEdit,最大可输入字符)