2012-03-22 5 views
2

내 텍스트 커서가 항상 의 동일한 세로 위치에 있어야합니다. QTextEdit.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. 
============================================ 

테이블을 포함하고 글꼴 크기가 너무 다르기 때문에 단순히 선 수를 계산할 수 없습니다.

답변

4

본 같이 슬롯으로 QTextEdit의 신호 cursorPositionChanged() 접속하여 스크롤 바의 위치 (QTextEdit::verticalScrollBar())의 커서 위치를 유지하기 원하는 targetYPosition에서 창 (QTextEdit::cursorRect()) 상대를 조작 할 수

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