首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextEdit和自定义滚动- PageDown/PageUp

QTextEdit和自定义滚动- PageDown/PageUp
EN

Stack Overflow用户
提问于 2014-09-21 14:06:16
回答 2查看 832关注 0票数 1

我试图在QTextEdit控件中实现自定义滚动行为。它似乎正在工作,但我在按下PageDown/PageUp键时遇到了问题:我通过actionTriggered信号控制滚动行为,因为文档声明:

当发出信号时,sliderPosition已经根据操作进行了调整,但该值尚未传播(这意味着valueChanged()信号尚未发出),并且视觉显示尚未更新。在连接到此信号的插槽中,您可以根据动作和滑块的值,自己调用setSliderPosition()来安全地调整任何操作。

然后用我需要从那里到达的QTimer启动一个sliderPosition (例如,每当value()到达sliderPosition时,我都在递增)。不幸的是,每次我按下PageUp/PageDown键时,还会有另一个setValue()函数调用,该函数调用由PageUp/PageDown键移动的插入符号触发,该插入符号将滚动条值自动移动到动画的末尾。

调用堆栈显示:

代码语言:javascript
复制
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()调用。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-21 22:36:24

OKay,所以就用

代码语言:javascript
复制
disconnect(receiver, SLOT(setValue...), unwanted_sender, SIGNAL(...))

若要断开特定的不需要的连接,请执行以下操作。

票数 1
EN

Stack Overflow用户

发布于 2014-09-21 18:33:01

经过一天的研究,我找到了这个解决方案,多亏了PapierKorb

  • 我在QPropertyAnimation属性上使用了QTimer,而不是手工的value处理。
  • 我为父控件安装了一个关键事件过滤器,以便捕获PageDown/PageUp事件(installEventFilter),并让ScrollBar处理所有滚动行为。在动画结束时,我手动地将光标移动到新位置,而不发送任何setValue信号。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25960026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档