我正在使用这段代码尝试从QTextEdit中删除最后一行:
ui->textEdit_2->textCursor().setPosition( QTextCursor::End);
auto k = ui->textEdit_2->textCursor().currentTable();
k->removeRows(k->rows() - 1, 1);
但是我遇到了分段错误。调试后,我发现当调用removeRows时,k为null。
我做错了吗?如果是的话,如何解决?
答案 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);