4

このコードを使用して、QTextEdit から最後の行を削除しようとしています。

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

しかし、セグメンテーション違反が発生します。デバッグ後、removeRows が呼び出されたときに k が null であることがわかりました。

私は何か間違ったことをしていますか?はいの場合、どうすれば修正できますか?

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 に答える