pyqt4 QTextEdit - Как установить MaxLength? - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть многострочный QTextEdit, который привязан к полю базы данных VARCHAR (2048).

Я хочу ограничить длину пользовательской записи максимум 2048 символами

QTextEdit не имеетметод setMaxLength (int), как это делает QLineEdit.

У кого-нибудь есть предложения?

self.editBox = QTextEdit()

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Я нашел этот FAQ на вики Qt:

Нет прямого API для установки / получения максимальной длины 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"));
}
}
0 голосов
/ 03 октября 2017

Использование слота "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

...