我正在尝试在QTextEdit控件中实现自定义滚动行为。它似乎正在工作,但我在按下 PageDown/PageUp 按键时遇到问题:我正在通过actionTriggered信号控制滚动行为,因为文档指出:
当信号发出时,sliderPosition 已经根据动作进行了调整,但是值还没有被传播(意味着 valueChanged() 信号还没有发出),视觉显示还没有更新。因此,在连接到此信号的插槽中,您可以根据动作和滑块的值自己调用 setSliderPosition() 来安全地调整任何动作。
并开始一个 QTimer ,sliderPosition
我需要从那里到达(例如,我每次都在递增value()
到达sliderPosition
)。不幸的是,每次我按下 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*)
...
我不知道如何防止插入符号QAbstractSlider::SetValue()
在由于 PageUp/PageDown 键按下而移动时发出该调用。
任何帮助将不胜感激。