As I already asked in this post link and got no answer, I need to get an event in exact time to take a picture of the scene in QGraphicsview which is playing some animations to be able to render it to a vide file with 30 fps, the timer isn't precise and also I used the frameChanged event of QTimeLine but it isn't precise too! I wonder so how can I render a QGraphicsview into a vide movie ?
for another solution, I moved the timer and another object with a simple slot into a new Thread, it works well when I do the things in the slot of the object in new thread but as soon as I connect the timeout signal of timer to a slot of my main GUI thread again the slot in main thread triggers late and Irregular while the slot in the object which is in new thread triggers in exact time! see
thread = new QThread();
timer = new QTimer();
pp = new PrecisePolling();
timer->setInterval(33);
timer->setTimerType(Qt::PreciseTimer);
QObject::connect(timer, &QTimer::timeout, pp, &PrecisePolling::timeout);
timer->start();
timer->moveToThread(thread);
pp->moveToThread(thread);
thread->start(QThread::Priority::TimeCriticalPriority);
QObject::connect(pp, &PrecisePolling::nowtimeout, this, &MainWindow::timeoutt);
void MainWindow::timeoutt()
{
const std::uint64_t ms = QDateTime::currentMSecsSinceEpoch();
qDebug() << "GUI "<< ms - previousPollingTime;
previousPollingTime = ms;
}
the worker class
void PrecisePolling::timeout()
{
emit nowtimeout();
const std::uint64_t ms = QDateTime::currentMSecsSinceEpoch();
qDebug() << "THR "<< ms - previousPollingTime;
previousPollingTime = ms;
}
output
THR 32
GUI 32
THR 33
GUI 33
THR 34
GUI 34
THR 32
GUI 32
THR 33
THR 33
THR 33
THR 34
THR 32
GUI 190
GUI 0
GUI 0
GUI 0
GUI 0
THR 34
GUI 9
THR 33
Please login or Register to submit your answer