8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

pyqt4 QTextEdit - 如何设置MaxLength?

mdl518 2月前

42 0

我有一个与数据库 VARCHAR(2048) 字段绑定的多行 QTextEdit。我想将用户输入长度限制为最大 2048 个字符,QTextEdit 没有像 QLin 那样的 setMaxLength(int) 方法……

我有一个与数据库 VARCHAR(2048) 字段绑定的多行 QTextEdit。

我想将用户输入的长度限制为最大 2048 个字符

QTextEdit 没有像 QLineEdit 那样的 setMaxLength(int) 方法。

有人有什么建议吗?

self.editBox = QTextEdit()

谢谢

帖子版权声明 1、本帖标题:pyqt4 QTextEdit - 如何设置MaxLength?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由mdl518在本站《qt》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在 Qt Wiki 上 这个常见问题解答

    没有直接的 API 来设置/获取 QTextEdit 的最大长度,但您可以自己处理这个问题,方法是将一个槽连接到 contentChanged() 信号,然后调用 toPlainText().length() 来查明它有多大。如果已达到限制,那么您可以重新实现 keyPressEvent() keyReleaseEvent(), 对普通字符不执行任何操作。

    这篇文章 感兴趣 ,其中附有一些代码(希望对您有用):

    #include <QtCore>
    #include <QtGui>
    #include "TextEdit.hpp"
    
    TextEdit::TextEdit() : QPlainTextEdit() {
    connect(this, SIGNAL(textChanged()), this, SLOT(myTextChanged()));
    }
    
    TextEdit::TextEdit(int maxChar) : QPlainTextEdit() {
    this->maxChar = maxChar;
    connect(this, SIGNAL(textChanged()), this, SLOT(myTextChanged()));
    }
    
    int TextEdit::getMaxChar() {
    return maxChar;
    }
    
    void TextEdit::setMaxChar(int maxChar) {
    this->maxChar = maxChar;
    }
    
    void TextEdit::myTextChanged() {
    if (QPlainTextEdit::toPlainText().length()>maxChar) {
    QPlainTextEdit::setPlainText(QPlainTextEdit::toPlainText().left(QPlainTextEdit::toPlainText().length()-1));
    QPlainTextEdit::moveCursor(QTextCursor::End);
    QMessageBox::information(NULL, QString::fromUtf8("Warning"),
    QString::fromUtf8("Warning: no more then ") + QString::number(maxChar) + QString::fromUtf8(" characters in this field"),
    QString::fromUtf8("Ok"));
    }
    }
    
  • 感谢 nvd ,让光标位置保持在正确的位置:

    self.description = QTextEdit()
    self.description.textChanged.connect(partial(self.txtInputChanged, self.description, 200))
    def txtInputChanged(self, txtInput, maxInputLen):
        text = txtInput.toPlainText()
        if len(text) > maxInputLen:
            cursor = txtInput.textCursor()
            pos = cursor.columnNumber()
            text = text[:pos-1] + text[pos:]
            txtInput.setPlainText(text)
            cursor.setPosition(pos - 1)
            txtInput.setTextCursor(cursor)
    
  • 使用插槽\'textChanged()\':

    txtInput = QPlainTextEdit()
    
    QObject.connect(txtInput, SIGNAL("textChanged()"), txtInputChanged)
    
    def txtInputChanged():
        if txtInput.toPlainText().length() > maxInputLen:
            text = txtInput.toPlainText()
            text = text[:maxInputLen]
            txtInput.setPlainText(text)
    
            cursor = txtInput.textCursor()
        cursor.setPosition(maxInputLen)
        txtInput.setTextCursor(cursor)
    

    另一种可能性是从“QPlainTextEdit”派生并重新实现“keyPress”事件过滤键,当达到最大长度或按下不需要输入的其他键时。

    http://doc.qt.io/qt-5/qplaintextedit.html#keyPressEvent

返回
作者最近主题: