Привет, суть такова. Имеем Qt5 и QtQuick2. Есть класс унаследованный от QQuickView. Нужно как-то запустить таймер, который бы периодически вызывал юзерский слот из потока рендера, чтобы был доступ к OpenGL контексту.
Если создавать таймер в конструкторе, то всё будет работать, но таймер будет вызываться из этого же потока.
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->start(16);
Если создавать таймер при возникновении сигнала sceneGraphInitialized, то таймер будет вызываться из нужного потока, но только если что-то делать с окном (менять размер например).
QTimer *timer = new QTimer(nullptr);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->setInterval(16);
timer->setSingleShot(false);
timer->moveToThread(QThread::currentThread());
timer->start();
Вероятно я делаю что-то не так? Как будет правильно? Вариант с постоянным дерганьем makeCurrent контекста из разных потоков не очень.