我试图在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*)
...当插入符号由于PageUp/PageDown键按下而被移动时,我不知道如何防止插入符号发出QAbstractSlider::SetValue()调用。
任何帮助都将不胜感激。
发布于 2014-09-21 22:36:24
OKay,所以就用
disconnect(receiver, SLOT(setValue...), unwanted_sender, SIGNAL(...))若要断开特定的不需要的连接,请执行以下操作。
发布于 2014-09-21 18:33:01
经过一天的研究,我找到了这个解决方案,多亏了PapierKorb
QTimer,而不是手工的value处理。setValue信号。https://stackoverflow.com/questions/25960026
复制相似问题