2つのQTextCursorメソッドのチェーン(setPositionとblockNumber)を使用する簡単な方法がわかります。
QTextCursor cursor = this->textCursor();
int start = cursor.selectionStart();
int end = cursor.selectionEnd();
if(!cursor.hasSelection())
return; // No selection available
cursor.setPosition(start);
int firstLine = cursor.blockNumber();
cursor.setPosition(end, QTextCursor::KeepAnchor);
int lastLine = cursor.blockNumber();
qWarning() << "start: " << firstLine << " end: " << lastLine << endl;
UPD:
cursor.setPosition(start);
cursor.block().layout()->lineForTextPosition(start).lineNumber();
// or
cursor.block().layout()->lineAt(<relative pos from start of block>).lineNumber();
選択を開始する位置を設定します。現在のブロックを取得し、ブロックのレイアウトを取得し、QtAPIを使用して行番号を取得します。返される行番号がドキュメント全体またはレイアウトの絶対値であるかどうかはわかりません。レイアウトのみの場合は、前のブロックの行番号を計算するための追加のプロセスが必要です。
for (QTextBlock block = cursor.block(). previous(); block.isValid(); block = block.previous())
lines += block.lineCount();