2012-07-26 155 views
4

我有以下代碼(在mouseReleaseEvent實現)當用戶選擇的文本行檢測:的QTextEdit - 讓選擇行號

QTextCursor cursor = this->textCursor(); 
    int start = cursor.selectionStart(); 
    int end = cursor.selectionEnd(); 

    if(!cursor.hasSelection()) 
     return; // No selection available 

    qWarning() << "start: " << start << " end: " << end << endl; 

的問題是:我需要的行號,其中選擇開始和結束。我一直在拼命掙扎,什麼也沒有解決,你能給我一個線索嗎?

回答

4

這是可能的,這不是最好的解決方案,但它似乎爲我工作。變量selectedLines將包含多少行被選中。

QTextCursor cursor = ui->plainTextEdit->textCursor(); 
int selectedLines = 0; //<--- this is it 
if(!cursor.selection().isEmpty()) 
{ 
    QString str = cursor.selection().toPlainText(); 
    selectedLines = str.count("\n")+1; 
} 

我希望,這將是有幫助:)

0

我看到使用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(); 
+0

有一個問題:我知道如何做到這一點,你發佈之前,但我試圖讓行號,而不是塊編號。 Block!=行,並且在我的文檔中有兩行代碼塊,所以我不能使用您的代碼 – 2012-07-26 21:13:15