Каков наилучший способ найти точное время кадра для визуализации QGraphicsview в QImage? - PullRequest
1 голос
/ 10 апреля 2020

Как я уже просил в этом посте ссылка и не получил ответа, мне нужно получить событие в точное время, чтобы сфотографировать сцену в QGraphicsview, которая воспроизводит некоторые анимации, чтобы иметь возможность визуализировать это видеофайл с 30 кадрами в секунду, таймер не точный, а также я использовал событие frameChanged в QTimeLine, но оно тоже не точное! Интересно, как я могу отрендерить QGraphicsview в виде mov ie?

для другого решения, я переместил таймер и другой объект с простым слотом в новый поток, он хорошо работает, когда я делаю вещи в слоте объекта в новом потоке, но как только я подключаю сигнал тайм-аута таймера к слоту моего основного потока GUI, снова слот в основном потоке срабатывает поздно и нерегулярно, пока слот в объекте, который находится в новая нить срабатывает в точное время! см

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;
}

выход

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
...