2012-03-22 3 views
2

Я хочу, чтобы мой текстовый курсор всегда находился в том же вертикальном положении QTextEdit.QTextEdit как сохранить выбранную текстовую строку в том же положении на экране

В качестве примера можно сказать, что у меня есть (* I * = cursor, ==== delimit окно редактирования). Скажем, * 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. 
============================================ 

Не то, чтобы я не мог просто подсчитывать линии, потому что у меня есть встроенные таблицы, а размер шрифта тоже отличается.

ответ

4

Вы можете манипулировать непосредственно положение полос прокрутки (QTextEdit::verticalScrollBar()), чтобы сохранить положение курсора (QTextEdit::cursorRect()) по отношению к окну на желаемом targetYPosition, подключив сигнал cursorPositionChanged() из QTextEdit в слот, как это:

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