【问题标题】:How do Update Qt Scene Graph from c++?如何从 C++ 更新 Qt 场景图?
【发布时间】:2017-04-29 15:23:15
【问题描述】:

我写了一个c++QQuickItem组件来绘制曲线,但是为了更新曲线,我必须通过定时器调用更新方法。

我在做什么的例子:

Item {
    Curve {
        id: curve
        height: 100
        width: 600
    }

Timer {
    id: timer
    interval:20
    repeat: true
    running: true
    onTriggered: {
        curve.update()
    }
 }
}

有没有办法从 C++ 调用它?

【问题讨论】:

    标签: qt opengl qtquick2 scenegraph


    【解决方案1】:

    你寻求的功能是:

    void QQuickWindow::update()

    安排窗口渲染另一帧。

    调用 QQuickWindow::update() 不同于 QQuickItem::update() 在 它总是触发重绘,无论在 底层场景图与否。

    您可以从任何QQuickItem 访问底层窗口,例如someItem->window()->update(),也可以直接传递WindowApplicationWindow

    You will have to implement a basic QObject derived accessor object so you can invoke the C++ function from QML, passing it a QML object as a parameter, either a window or item. Then create an instance in main.cpp, expose it as a context property,然后从 QML 你可以简单地onTriggered: Accessor.requestUpdate(someItem/someWindow)

    【讨论】:

    • 你能举例说明一下吗?
    • 它说只能从 GUI 线程或 QQuickItem::updatePaintNode() 安排更新
    • @sayyedmohsenzahraee - 在这种情况下,请尝试使用 QMetaObject::invokeMethod()Qt::QueuedConnection 调用函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多