QTextEditコントロールにカスタム スクロール動作を実装しようとしています。動作しているようですが、PageDown/PageUp キーの押下に問題があります。ドキュメントに次のように記載されているため、actionTriggeredシグナルを介してスクロール動作を制御しています。
シグナルが発行されると、sliderPosition はアクションに従って調整されていますが、値はまだ伝搬されておらず (つまり、valueChanged() シグナルがまだ発行されていません)、ビジュアル表示は更新されていません。したがって、このシグナルに接続されたスロットでは、アクションとスライダーの値の両方に基づいて setSliderPosition() を自分で呼び出すことにより、任意のアクションを安全に調整できます。
sliderPosition
そこから到達する必要があるQTimerを開始します(たとえばvalue()
、到達するたびにインクリメントしていますsliderPosition
)。残念ながら、PageUp/PageDown キーを押すたびに、スクロールバーの値をアニメーションの最後に自動的に移動するPageUp/PageDown キーによって移動されるキャレットによってトリガーされる別のsetValue () 関数呼び出しもあります。
コール スタックは次のように表示されます。
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*)
...
QAbstractSlider::SetValue()
PageUp/PageDown キーを押したためにキャレットが移動したときに、キャレットがその呼び出しを発行しないようにする方法がわかりません。
どんな助けでも大歓迎です。