4

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

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

但我得到一个分段错误。调试后我发现调用 removeRows 时 k 为空。

难道我做错了什么?如果是,如何解决?

4

2 回答 2

10

试试这个(测试):

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);
于 2013-03-10T20:06:14.003 回答
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); 
于 2013-03-10T19:42:54.440 回答