【问题标题】:Qt5: paintEvent is not called after an update() in mouseMoveEventQt5:在 mouseMoveEvent 中的 update() 之后不调用paintEvent
【发布时间】:2014-12-10 16:34:22
【问题描述】:

我正在使用 QAbstractScrollArea + 自定义 QWidget 衍生小部件作为“the”小部件 (覆盖了 sizeHint() )。 应用程序需要在 mouseMove 期间不断更新 QWidget 内容(类似于 拖动,但不完全是,它是在对象之间绘制线条的绘图工具,因此鼠标 光标需要改变 + 线需要动态绘制)。

应用程序运行良好,例如我可以正确渲染内容,滚动条可见, 我可以在 scrollContentsBy 等期间手动更新视口。

但是,无论我在 mouseMoveEvent 中手动触发 update()(或 repaint())调用, 只有在“拖动”过程结束后才会调用paintEvent,例如mouseReleaseEvent 被触发。

我不知道为什么会这样。显然,如果我直接在 mouseMoveEvent,它将被 QPainter 拒绝(因为我无法在其中实例化 QPainter mouseMoveEvent - Qt 在尝试这样做时会丢弃“不应再调用paintEngine”)。

欢迎任何建议:) 谢谢,

【问题讨论】:

    标签: qt paintevent


    【解决方案1】:

    嗯,跛脚。永远不要将“update()”与“viewport()->update()”混为一谈

    【讨论】:

    • 我在扩展 QAbstractScrollArea 的自定义小部件上遇到了同样的问题。我搜索的所有地方都声称 this->update()/this->repaint() 会起作用。从来没有意识到我需要在 viewport() 上做这件事。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多