pyqt4 QTextEdit - 如何设置最大长度?

3 投票
2 回答
8409 浏览
提问于 2025-04-17 08:14

我有一个多行的 QTextEdit,它和数据库中的一个 VARCHAR(2048) 字段连接在一起。

我想限制用户输入的长度,最多只能输入 2048 个字符。

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

有没有人有什么建议呢?

self.editBox = QTextEdit()

谢谢

2 个回答

1

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

3

我在Qt的维基上找到了这个常见问题解答

QTextEdit没有直接的接口可以设置或获取最大长度,但你可以自己处理这个问题。方法是把一个槽函数连接到内容改变(contentsChanged())的信号,然后调用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"));
}
}

撰写回答