pyqt4 QTextEdit - 如何设置最大长度?
我有一个多行的 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”事件,这样当达到最大输入长度时,或者按下其他不想要的键时,就可以过滤掉这些键的输入。
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"));
}
}