我有一個綁定到數據庫VARCHAR(2048)字段的多行QTextEdit。pyqt4 QTextEdit - 如何設置MaxLength?
我想用戶條目長度限制到最大的2048個字符
的QTextEdit沒有setMaxLength(int)方法一樣QLineEdit的一樣。
任何人有任何建議嗎?
self.editBox = QTextEdit()
感謝
我有一個綁定到數據庫VARCHAR(2048)字段的多行QTextEdit。pyqt4 QTextEdit - 如何設置MaxLength?
我想用戶條目長度限制到最大的2048個字符
的QTextEdit沒有setMaxLength(int)方法一樣QLineEdit的一樣。
任何人有任何建議嗎?
self.editBox = QTextEdit()
感謝
我發現this FAQ對Qt的維基:
沒有直接的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」事件過濾按鍵。