5

我可以通过使用来获取光标所在的行QTextEdit.textCursor().blockNumber(),但是当一行换成多行时,它不能返回实际的行号。

我怎样才能做到这一点?

4

3 回答 3

7

我不确定它会起作用,所以我编写了一个快速测试应用程序(Qt 5.0.1)并且它起作用了,这里是它的一部分:

void MainWindow::on_plainTextEdit_cursorPositionChanged()
{
    QPlainTextEdit *edit = qobject_cast<QPlainTextEdit *>(sender());
    Q_ASSERT(edit);
    QTextCursor cursor = edit->textCursor();
    cursor.movePosition(QTextCursor::StartOfLine);

    int lines = 1;
    while(cursor.positionInBlock()>0) {
        cursor.movePosition(QTextCursor::Up);
        lines++;
    }
    QTextBlock block = cursor.block().previous();

    while(block.isValid()) {
        lines += block.lineCount();
        block = block.previous();
    }
    ui->label->setText(QString::number(lines));
}
于 2013-04-04T20:52:12.247 回答
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
于 2013-11-01T16:34:47.180 回答
-1

QTextCursor有很多有用的方法,比如:

int QTextCursor::position () const

返回光标在文档中的绝对位置。光标位于字符之间。

int QTextCursor::positionInBlock () 常量

返回光标在块内的相对位置。光标位于字符之间。

这相当于position() - block().position().

于 2013-04-04T15:58:02.937 回答