QTextEdit如何使当前选中的文本行在屏幕上保持相同的位置

3
我希望我的文本光标始终在 QTextEdit 的相同垂直位置。
例如,假设我有一个编辑框(*I* 代表光标,==== 表示编辑框边界),并且 *I* 距离顶部有 20 像素。
============================================
Today is a nice weather
I wanted to go *I*for a walk. 
But finaly got caught in a rain.
============================================

现在如果我将光标向下移动。
============================================
I wanted to go for a walk. 
But finaly got *I*caught in a rain.
Damn it.
============================================

我不能简单地从中计算行数,因为我的文本中嵌入了表格并且字体大小也不同。

1个回答

6

您可以直接操作滚动条的位置(QTextEdit::verticalScrollBar()),将光标位置(QTextEdit::cursorRect())相对于窗口保持在所需的targetYPosition,通过将QTextEdit的信号cursorPositionChanged()连接到像这样的插槽:

void moveScrollBar() {
    int cursorY = textEdit->cursorRect().top();
    QScrollBar *vbar = textEdit->verticalScrollBar();
    vbar->setValue(vbar->value() + cursorY - targetYPosition);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接