pyqt4 QTextEdit - 如何设置MaxLength?

时间:2011-12-12 18:59:04

标签: python pyqt pyqt4

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

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

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

有人有任何建议吗?

self.editBox = QTextEdit()

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

使用插槽&#34; textChanged()&#34;:

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)

另一种可能性来源于&#34; QPlainTextEdit&#34;并重新实现&#34; keyPress&#34;达到最大长度时按事件过滤键或按下其他不需要输入的键。

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