を使用してカーソルの行を取得できます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()です。