2011-12-12 154 views
3

我有一個綁定到數據庫VARCHAR(2048)字段的多行QTextEdit。pyqt4 QTextEdit - 如何設置MaxLength?

我想用戶條目長度限制到最大的2048個字符

的QTextEdit沒有setMaxLength(int)方法一樣QLineEdit的一樣。

任何人有任何建議嗎?

self.editBox = QTextEdit() 

感謝

回答

3

我發現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")); 
} 
} 
0

使用插槽 「框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

相關問題