エディターで行・列にジャンプする方法

QPlainTextEditなどのエディターで3行目の5文字目というように行と列にカーソルをジャンプする簡単な方法を紹介します。

エディターでカーソルの位置を管理しているのはQTextCursorクラスです。

もしエディター内のカーソルを動かしたい場合はこのカーソルクラスを使って新しくカーソルを設定してあげればOKです。

例えばエディターの3行6文字目にカーソルを移動したい場合は次のコードを書きます。

int jumpRowNumber = 2;
    /// ジャンプしたいブロックのインデックス番号
int jumpColumnCount = 6;
    /// ブロック中でジャンプしたい文字数

QPlainTextEdit edit;
edit.insertPlainText("\n\nHello QT!!!");

QTextBlock block = edit.document()->findBlockByNumber(jumpRowNumber);
QTextCursor cursor = QTextCursor(block);
if(jumpColumnCount < block.length()){
    cursor.movePosition(QTextCursor::NextCharacter, 
        QTextCursor::MoveAnchor, jumpColumnCount - 1);
}else{
    cursor.movePosition(QTextCursor::NextCharacter, 
        QTextCursor::MoveAnchor, block.length() - 1);
}
edit.setTextCursor(cursor);
edit.show();

移動する文字数がブロックの長さを超えていたらブロックの最後に移動させるようにしています。

また、カーソルが移動する場所はブロックの1文字目の直前から1文字としてカウントしています。

エディターで3行目6文字目に移動後の画像

例えば3行6文字目に移動したときは上の画像のように3行目のブロックの6文字目(スペース)の前にカーソルが移動します。

ここではQPlainTextEditを例に出しましたが、この方法はエディタークラス全般で使えると思います。

関連項目
プライバシーポリシー