Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QTimer in QQuickItem’s updatePaintNode()



  • http://qt-project.org/doc/qt-5.0/qtquick/qtquick-visualcanvas-scenegraph.html
    From this blog, I understand that threaded renderer is used by default on mac.

    Is it possible to start a timer in QQuickItem's updatePaintNode() on mac? During updatePaintNode, on mac we are currently on the scene graph renderer thread with the scene graph's OpenGL context current.

    @QSGNode *AAA::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
    {
    m_timer = new(std::nothrow) QTimer(0);
    m_timer->setInterval(20);
    connect(m_timer, SIGNAL(timeout()), this, SLOT(pulse_()),Qt::DirectConnection);
    m_self_timer->start();
    // Draw stuff
    }@

    I want the timer to be executed continuously and like to destroy it in my class's destructor.. I am not sure how the render thread's event loop works. With the above code, timeout events stop once drawing completes and then re-starts when update occurs the next time.

    Basically , I am using a custom library for drawing an OpenGL component. At certain conditions, if the drawing and GUI threads are different, the library blocks the GUI thread and waits for a pulse event to unblock the UI thread.
    I am trying to send this pulse event from a timer that is running in the renderer thread.

    I am trying to figure out the best place to place my timer in multithreaded environment. Would appreciate any help on this.


Log in to reply