を使用してカーソルの行を取得できますQTextEdit.textCursor().blockNumber()
が、1行が複数行に折り返されると、実際の行番号を返すことができません。
どうやってやるの?
を使用してカーソルの行を取得できますQTextEdit.textCursor().blockNumber()
が、1行が複数行に折り返されると、実際の行番号を返すことができません。
どうやってやるの?
Python での同様のソリューションを次に示します。上記の以前の問題のコメントで指摘した問題を修正します。これは のサブクラスのメソッドですQTextEdit
:
def getLineAtPosition(self, pos):
cursor = self.textCursor()
cursor.setPosition(pos)
cursor.movePosition(QTextCursor.StartOfLine)
lines = 0
lines_text = cursor.block().text().splitlines()
lines_pos = 0
for line_text in lines_text:
lines_pos += len(line_text) + 1
if lines_pos > cursor.position() - cursor.block().position():
break
lines += 1
block = cursor.block().previous()
while block.isValid():
lines += block.lineCount()
block = block.previous()
return lines
QTextCursor
次のような便利なメソッドがたくさんあります。
int QTextCursor::position () const
ドキュメント内のカーソルの絶対位置を返します。カーソルは文字の間に置かれます。
と
int QTextCursor::positionInBlock () const
ブロック内のカーソルの相対位置を返します。カーソルは文字の間に置かれます。
これは と同等position() - block().position()
です。