2014-09-21 3 views
1

QTextEdit 컨트롤에서 사용자 정의 스크롤 동작을 구현하려고합니다. 이 동작하는 것 같지만 나는 PageDown 키/페이지 업 키 입력에 문제가있어 :QTextEdit 및 사용자 정의 스크롤 - PageDown/PageUp

신호가 방출되는

의 sliderPosition가있다 : 나는 문서 상태 이후 actionTriggered 신호를 통해 스크롤 동작을 제어하고있어 작업에 따라 을 조정했지만 값이 아직 전파되지 않았으므로 (valueChanged() 신호가 아직 방출되지 않았 음을 의미) 시각적 디스플레이가 업데이트되지 않았습니다. 이 신호에 연결된 슬롯에서 을 사용하면 작업 및 슬라이더 값을 기반으로 setSliderPosition() 을 직접 호출하여 모든 작업을 안전하게 조정할 수 있습니다.

내가 거기에서 도달하는 데 필요한 sliderPosition와 QTimer을 시작

(예를 들어, 나는 sliderPosition에 도달 할 때마다 value()를 증가하고 있습니다). 아쉽게도 PageUp/PageDown 키를 누를 때마다 setValue() 함수 호출 이 PageUp/PageDown 키에 의해 이동되는 캐럿에 의해 트리거되어 자동으로 스크롤 막대 값을 애니메이션 끝으로 이동시킵니다.

호출 스택을 보여줍니다

QAbstractSlider::setValue(int) 
?? 
QMetaObject::activate(QObject*, int, int, void**) 
QWidgetTextControl::visibilityRequest(QRectF const&)  
QWidgetTextControl::ensureCursorVisible() <-- 
QWidgetTextControl::setTextCursor(QTextCursor const&) <-- 
QTextEdit::keyPressEvent(QKeyEvent*) 
QWidget::event(QEvent*) 
QFrame::event(QEvent*) 
QAbstractScrollArea::event(QEvent*) 
QTextEdit::event(QEvent*) 
QApplicationPrivate::notify_helper(QObject*, QEvent*) 
QApplication::notify(QObject*, QEvent*) 
QCoreApplication::notifyInternal(QObject*, QEvent*) 
... 

내가 발행에서 캐럿을 방지하는 방법에 대한 아무 생각이 그 캐럿이 페이지 업/PageDown 키 키 누름으로 인해 이동 QAbstractSlider::SetValue() 전화.

도움을 주시면 감사하겠습니다.

+0

SetValue 신호를'QObject :: disconnect'하려고 했습니까? – Thomas

+0

나는 setValue() 메소드 자체에 의존했기 때문에 Thomas를 사용할 수 없었다. –

+0

아마도 오해가 있었을 지 모르겠지만'setValue()'를 완전히 끊어 버리려는 의도는 아니었다. 특정 연결'disconnect (receiver, SLOT setValue ...), unwanted_sender, SIGNAL (...))', setValue를 사용하는 모든 옵션을 남겨 두어야합니다. 그럼에도 불구하고, 지금은 작동하기 때문에 ...;) – Thomas

답변

1

좋아요를 전송하지 않고 새로운 위치로 커서를 이동했다.

0

연구의 하루를 보낸 후 나는 에 PapierKorb 솔루션 덕분에 발견 : 나는 QPropertyAnimation 대신 내가 키를 설치

  • value 재산 취급 손으로 만든 QTimer의 사용

    • PageDown/PageUp 이벤트 (installEventFilter)를 포착하고 ScrollBar가 모든 스크롤 동작을 처리하도록 부모 컨트롤의 이벤트 필터를 설정합니다. 애니메이션의 끝에서 나는 수동, 그래서 그냥 특정 원치 않는 연결을 깰

      disconnect(receiver, SLOT(setValue...), unwanted_sender, SIGNAL(...)) 
      

      을 사용하십시오 setValue 신호

  • 관련 문제