2011-02-08 2 views
7

QPlainTextEdit 또는 QTextEdit 영역이 변경된 경우 스크롤바를 아래/위로 이동하는 방법을 프로그래밍 하시겠습니까? 제어 기능이없는 것 같습니다.QPlainTextEdit 또는 QTextEdit 영역이 변경된 경우 스크롤바를 아래/위로 이동하도록 프로그래밍하는 방법은 무엇입니까?

+0

우리는 두 개의 서로 다른 해석이있다! 텍스트를 변경하거나 지오메트리를 변경한다는 의미입니까? – TonyK

답변

3

텍스트 편집 컨트롤의 크기를 조정하면 QWidget::resizeEvent이 호출됩니다. 하위 클래스에서이 함수를 무시하고 verticalScrollBar -> setValue (verticalScrollBar -> minimum()) (또는 maximum())을 호출하면됩니다.

+0

답변 해 주셔서 감사합니다! 특수 서버용 터미널 클라이언트 프로그램을 개발하고 싶습니다. 화면을 잠 그거나 잠금을 해제 할 수있는 확인란이 있습니다. 잠금이 해제되면 QPlainTextBox에 쓰여진 처리 된 수신 패킷이 자동으로 스크롤 막대를 (커서 위치에 관계없이) 맨 아래에 놓습니다. 귀하의 솔루션은 유망한 것으로 보입니다. 나중에 내가 너에게 피드백을 줄거야. 고마워! – falconium

7
당신은 'ensureCursorVisible'방법을 사용할 수 있습니다

: 당신이 어떤 신호에 연결할 수 있도록

void QTextEdit::ensureCursorVisible() 
Ensures that the cursor is visible by scrolling the text edit if necessary. 

이하지만, 슬롯하지 않습니다 - 당신은 만들어야합니다 void textChanged() 신호에 연결할 수있는 무언가.

면책 조항 : 질문이 잘못 이해되었을 수도 있습니다. 텍스트에 텍스트가 추가되면 아래로 스크롤하려는 것으로 간주합니다.

+0

정답으로 받아 들여야합니다 – warunanc

14

QTextEdit 및 QPlainTextEdit는 모두 QAbstractScrollArea에서 상속됩니다. QAbstractScrollArea 객체는 verticalScrollBar() 메서드를 통해 스크롤 막대에 대한 액세스를 제공합니다. 따라서

는 상단로 이동합니다 :

ui.textEdit->verticalScrollBar()->setValue(0); 

그리고 맨 아래로 이동하기 :

ui.textEdit->verticalScrollBar()->setValue(ui.textEdit->verticalScrollBar()->maximum()); 

이은 QTextEdit와 QPlainTextEdit 모두 작동합니다.

+0

TonyK의 대답이 이미 문제를 해결하지 못했습니다. TonyK의 답변을 받아 들여야합니다. – d11

0

여기에서 내 을 게시 할 예정입니다. 솔루션 위와 같은 해결책이 내 경우에 유용합니다.

QTextbrowser의 시작 부분에 커서를 가져 오려고합니다. 그것은 어떤 일에 도움이 소중한 시간을 절약 할 수,

 // Go to beginning 
    QTextCursor textCursor = ui->textBrowser->textCursor(); 
    textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1); 
    ui->textBrowser->setTextCursor(textCursor); 

희망 : QTextEdit::setTextCursor를 사용하여

, 당신은 당신이 원하는 보이는 커서를 이동할 수 있습니다.

0

나는 Pyqt에서 작업했다.

self.scrollArea.verticalScrollBar(). rangeChanged.connect (self.change_scroll)

--------

@pyqtSlot(int, int) 
def change_scroll(self, min, max): 
    print("cambio", min, max) 
    self.scrollArea.verticalScrollBar().setSliderPosition(max)