我可以通過QTextCursor :: blockNumber()和QTextCursor :: positionInBlock()得到ROW和COL的當前位置。我的問題是,如何將光標移動到具有行和列的特定位置。像的Qt:如何將文本編輯光標到特定關口和行
setPosition(x,y) // The current cursor would move to row x and col y.
有沒有可能這樣做?
我可以通過QTextCursor :: blockNumber()和QTextCursor :: positionInBlock()得到ROW和COL的當前位置。我的問題是,如何將光標移動到具有行和列的特定位置。像的Qt:如何將文本編輯光標到特定關口和行
setPosition(x,y) // The current cursor would move to row x and col y.
有沒有可能這樣做?
簡單的解決方案:
只需將光標移動有:
textEdit.moveCursor(QTextCursor::Start); //set to start
for(<... y-times ...>)
{
textEdit.moveCursor(QTextCursor::Down); //move down
}
for(< ... x-times ...>)
{
textEdit.moveCursor(QTextCursor::Right); //move right
}
moveCursor也是後藤方式,如果您需要將其更改爲「中選擇」文本。最後還有一個沒有循環的類似方法。
多一點的解釋,也許更好的解決方案:
在理論文本有像顯示在圖形用戶界面,但沒有「線」的endline-character
(\n
或\r\n
取決於操作系統和框架上)只只是另一個角色。所以對於遊標來說,大多數情況下,只有一個「文本」沒有行。
有包裝功能來處理這個問題,但我稍後再討論它們。首先,您不能直接通過QTextEdit
界面訪問這些界面,但必須直接操作光標。
QTextCursor curs = textEdit.textCursor(); //copies current cursor
//... cursor operations
textEdit.setTextCursor(curs);
現在的「操作」:
如果你知道你想要的字符串中去什麼位置,你有setPosition()
這裏。這個「位置」雖然不是垂直線,而是整個文本。
這是一個多行字符串內部的外觀:
"Hello, World!\nAnotherLine"
這表明
Hello, World!
AnotherLine
setPosition()
希望內部字符串的位置。
要移動到另一行,您必須通過在文本中查找第一個\n
來計算位置並添加您的x偏移量。如果你想第三行看第2 \n
等
幸運的是,也有功能setVerticalMovement
這似乎包裝這個,也許是你想要做的。它垂直移動光標。
所以,你可以這樣做:
curs.setPosition(x); //beginning at first line
curs.setVerticalMovement(y); //move down to the line you want.
上面的光標顯示,呼叫setTextCursor
等之後。
注:
的順序很重要,但。 設置全文中的位置。所以setPosition(5)
雖然也許在第三行而不是將它設置爲你所在行中的第五個字符,但是是整個文本。所以先移動x座標,然後移動y。
您需要注意線條的長度。
some longer line
short
another longer line
如果您現在指定第2行和第7列,它將是「超出界限」。我不確定verticalMovement
在這裏的表現如何。我假設光標將在行的末尾。
當您使用QTextCursor
類直接您還可以使用移動操作不循環,因爲他們有一個額外的參數重複操作。
curs.movePosition(QTextCursor::Start);
curs.movePosition(QTextCursor::Down,<modeMode>,y); //go down y-times
curs.movePosition(QTextCursor::Right,<moveMode>,x); //go right x-times
我認爲最好的方法是通過QTextCursor
。
例如,如果您QTextEdit
被稱爲textEdit
:
QTextCursor textCursor = ui->textEdit->textCursor();
textCursor.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, x);
textCursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, y);
ui->textEdit->setTextCursor(textCursor);
凡x
和y
是需要的位置。
很好的答案。你有我的upvote :) – Tarod
@塔羅德thx。考慮到問題的長度,這可能有點太多,雖然:D – Hayt
Nah,這是一個非常好的解釋;) – Tarod