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

Ant*_*ton 3 qt cursor-position qtextedit

我希望我的文本光标始终位于QTextEdit的相同垂直位置.

举个例子,我说(*I*= cursor,====分隔编辑框).可以说*I*距离顶部20像素.

============================================
Today is a nice weather
I wanted to go *I*for a walk. 
But finaly got caught in a rain.
============================================
Run Code Online (Sandbox Code Playgroud)

现在,如果我将光标向下移动.

============================================
I wanted to go for a walk. 
But finaly got *I*caught in a rain.
Damn it.
============================================
Run Code Online (Sandbox Code Playgroud)

并不是说我不能简单地计算行数,因为我有嵌入表格,字体大小也不同.

ale*_*sdm 5

可以直接操纵滚动条的位置(QTextEdit::verticalScrollBar()),以保持所述光标位置(QTextEdit::cursorRect())相对于在所希望的窗口targetYPosition由信号连接,cursorPositionChanged()QTextEdit对像这样的槽:

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