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

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值