QTextEdit和自定义滚动 - PageDown/PageUp
我试图在QTextEdit控件中实现自定义滚动行为。这似乎是工作,但我有与PageDown键/ PageUp键按键问题:我控制,因为文档国通过actionTriggered信号滚动行为:QTextEdit和自定义滚动 - PageDown/PageUp
当信号发出时,sliderPosition有根据动作调整了 ,但该值尚未传播 (意味着valueChanged()信号尚未发射),并且 视觉显示尚未更新。在连接到此信号的插槽 中,您可以根据动作和滑块的值,通过自己调用setSliderPosition() 来安全地调整任何动作。
和开始与sliderPosition
我需要从那里达到QTimer(例如我每次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()
呼叫时插入符号由于移动到上一页/下一页按键。
任何帮助将不胜感激。
好了,所以只使用
disconnect(receiver, SLOT(setValue...), unwanted_sender, SIGNAL(...))
打破特定不必要的连接。
研究了一天后,我找到了解决办法感谢PapierKorb:
我用的QPropertyAnimation代替手工制作
QTimer
处理上我安装了一个关键的
value
财产父控件的事件过滤器,以捕获PageDown/PageUp事件(installEventFilter),并让ScrollBar处理所有滚动行为。在动画的最后,我手动光标移动到新位置,而不会发送任何信号setValue
您是否试过'QObject :: disconnect'的SetValue信号? – Thomas 2014-09-21 14:19:37
它不能工作托马斯,因为我依靠'setValue()'方法我自己 – 2014-09-21 18:28:44
也许我误解了,但我不是故意要断开'setValue()'完全,只是特定的连接'断开(接收器,SLOT( setValue ...),unwanted_sender,SIGNAL(...))',这应该让所有选项都使用setValue - 可能是通过您安装的新连接。尽管如此,因为它现在工作...;) – Thomas 2014-09-21 20:59:22