QTextEdit在禁止滑動條顯示的情況下,防止輸入的文本超出編輯器

目前我個人在做項目中遇到的問題就是,在禁止掉水平,錘子的滑動條的情況下,輸入的文本超出編輯框的時候,下面的文本會將上面的文本頂出編輯框的大小,顯示不全, 具體解決,首先設置編輯器的屬性爲不能換行( 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();
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章