我看到使用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();
設定的位置開始選擇。獲取當前塊,獲取塊的佈局並使用Qt API獲取行號。我不知道返回的行號對於整個文檔或佈局是絕對的。如果僅用於佈局,則需要一些額外的過程來計算先前塊的行號。
for (QTextBlock block = cursor.block(). previous(); block.isValid(); block = block.previous())
lines += block.lineCount();
有一個問題:我知道如何做到這一點,你發佈之前,但我試圖讓行號,而不是塊編號。 Block!=行,並且在我的文檔中有兩行代碼塊,所以我不能使用您的代碼 – 2012-07-26 21:13:15