【问题标题】:pyqt4 QTextEdit - How to setMaxLength?pyqt4 QTextEdit - 如何设置MaxLength?
【发布时间】:2017-10-04 02:28:36
【问题描述】:

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

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

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

大家有什么建议吗?

self.editBox = QTextEdit()

谢谢

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:

    我在 Qt Wiki 上找到了this FAQ

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

    您可能还对附有一些代码的this post 感兴趣(希望它对您有用):

    #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"));
    }
    }
    

    【讨论】:

      【解决方案2】:

      使用槽“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

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 2018-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多