QT QTextEdit/QTextBrowser append() 函数换行解决方法

目录

    • 解决方法
    • 更好的方法

解决方法

这里先感谢 diyuanbo 大神;使用如下方法,用户选中文本时新增文本也不会乱码。

QTextCursor tc = ui->textRec->textCursor();
tc.movePosition(QTextCursor::End);
tc.insertText(appendStr);

更好的方法

这个方法参考了QT append()函数的源码。

    //获取滚动条位置
    bool atEnd = ui->textRec->verticalScrollBar()->value() >= ui->textRec->verticalScrollBar()->maximum();
    QTextCharFormat fmt;
    fmt.setForeground(color);

    QTextCursor tmp(ui->textRec->document());

    tmp.beginEditBlock();
    tmp.movePosition(QTextCursor::End);

    if (!ui->textRec->document()->isEmpty())
    {
        tmp.insertBlock(ui->textRec->textCursor().blockFormat(), ui->textRec->textCursor().charFormat());
    }else{

        tmp.setCharFormat(ui->textRec->textCursor().charFormat());
    }

    tmp.movePosition(QTextCursor::End);
    tmp.deletePreviousChar();

    tmp.insertText(appendStr, fmt);

    // preserve the char format
    QTextCharFormat oldCharFormat = ui->textRec->textCursor().charFormat();

    if (!ui->textRec->textCursor().hasSelection())
        ui->textRec->textCursor().setCharFormat(oldCharFormat);

    tmp.endEditBlock();
    if(atEnd)
        ui->textRec->verticalScrollBar()->setValue(ui->textRec->verticalScrollBar()->maximum());

你可能感兴趣的:(杂技)