我希望我的文本光标始终位于 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.
============================================

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

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

最佳答案

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

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

关于QTextEdit 如何将当前选定的文本行保持在屏幕上的同一位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9830330/

10-11 20:18