QTextEdit, как сохранить текущую выделенную текстовую строку в той же позиции на экране - PullRequest
3 голосов
/ 23 марта 2012

Я хочу, чтобы мой текстовый курсор всегда находился в одной и той же вертикальной позиции 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 Ответ

5 голосов
/ 23 марта 2012

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

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