目前我個人在做項目中遇到的問題就是,在禁止掉水平,錘子的滑動條的情況下,輸入的文本超出編輯框的時候,下面的文本會將上面的文本頂出編輯框的大小,顯示不全, 具體解決,首先設置編輯器的屬性爲不能換行( this->setLineWrapMode(QTextEdit::NoWrap);)或者一直檢查光標所在行的字符串的長度不能大於編輯器的寬度,因爲QTextEdit控件是在輸入的字符串的長度大於控件的寬度的時候,會自動的換行,這樣處理,就是需要用戶手動的敲回車鍵,進行換行,如此一來,就可以統計到目前輸入的行數,從而達到控制文本的目的,下面是主要的代碼:
在QTextEdit的信號textChanged()的槽函數中做一下操作:
int lineCount = this->document()->lineCount();
QTextDocument* textDocument = this->document();//獲取指定textEdit位置
QTextCursor cursor;
cursor = this->textCursor();
int lineNumber = cursor.blockNumber();//獲取光標所在列用cursor.columnNumber();
QTextBlock textBlock = textDocument->findBlockByLineNumber(lineNumber);//通過行號找到指定行 數據塊
QString selectLine = textBlock.text();//將得到的數據存入一個字符串。
QFontMetrics fm(m_textFont);//字體大小
int pixelsWide = fm.width(selectLine); //根據字體大小計算光標所在行的字符串的長度
if (pixelsWide > this->width() - 22 || lineCount > 文本編輯器最大的行數)
{
this->setPlainText(m_textSub);
this->undo();
/*設置光標位置在最後*/
this->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
}
else if(pixelsWide <= this->width() - 22(臨界值,避免文本的長度達到編輯器的長度時,自動換行) && lineCount <= 文本編輯器最大的行數)
{
m_textSub = this->toPlainText();
}