【发布时间】:2017-10-04 02:28:36
【问题描述】:
我有一个与数据库 VARCHAR(2048) 字段绑定的多行 QTextEdit。
我想将用户输入长度限制为最多 2048 个字符
QTextEdit 没有像 QLineEdit 那样的 setMaxLength(int) 方法。
大家有什么建议吗?
self.editBox = QTextEdit()
谢谢
【问题讨论】:
我有一个与数据库 VARCHAR(2048) 字段绑定的多行 QTextEdit。
我想将用户输入长度限制为最多 2048 个字符
QTextEdit 没有像 QLineEdit 那样的 setMaxLength(int) 方法。
大家有什么建议吗?
self.editBox = QTextEdit()
谢谢
【问题讨论】:
我在 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"));
}
}
【讨论】:
使用槽“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”事件过滤键。
【讨论】: