从QTextEdit中删除最后一行

时间:2013-03-10 19:33:38

标签: c++ qt

我正在使用这段代码尝试从QTextEdit中删除最后一行:

    ui->textEdit_2->textCursor().setPosition( QTextCursor::End);
    auto k = ui->textEdit_2->textCursor().currentTable();
    k->removeRows(k->rows() - 1, 1);

但是我遇到了分段错误。调试后,我发现当调用removeRows时,k为null。

我做错了吗?如果是的话,如何解决?

2 个答案:

答案 0 :(得分:7)

试试这个(经过测试):

ui->textEdit_2->setFocus();
QTextCursor storeCursorPos = ui->textEdit_2->textCursor();
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
ui->textEdit_2->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::KeepAnchor);
ui->textEdit_2->textCursor().removeSelectedText();
ui->textEdit_2->textCursor().deletePreviousChar();
ui->textEdit_2->setTextCursor(storeCursorPos);

答案 1 :(得分:2)

(只是留下未删除的内容以显示执行相同操作的另一种方式)

您可以尝试删除最后一行:

QTextCursor cursor = ui->textEdit_2->textCursor();
cursor.movePosition(QTextCursor::End);
cursor.select(QTextCursor::LineUnderCursor);
cursor.removeSelectedText();
cursor.deletePreviousChar(); // Added to trim the newline char when removing last line
ui->textEdit_2->setTextCursor(cursor);

如果要将光标位置恢复到原来的位置,只需在调用之前保存光标位置

cursor.movePosition(QTextCursor::End);

然后删除文字。

ui->textEdit_2->setTextCursor(savedCursorPos);