Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 找到将QGraphicsview渲染为QImage的精确帧时间的最佳方法是什么?_C++_Qt_Animation_Qgraphicsview - Fatal编程技术网

C++ 找到将QGraphicsview渲染为QImage的精确帧时间的最佳方法是什么?

C++ 找到将QGraphicsview渲染为QImage的精确帧时间的最佳方法是什么?,c++,qt,animation,qgraphicsview,C++,Qt,Animation,Qgraphicsview,正如我在这篇文章中已经问过的,但没有得到答案,我需要在准确的时间获得一个事件,以便在QGraphicsview中拍摄场景,它正在播放一些动画,以便能够以30 fps的速度渲染到视频文件,计时器不精确,而且我使用了QTimeLine的frameChanged事件,但它也不精确!我想知道如何将QGraphicsview渲染成视频电影 对于另一个解决方案,我将计时器和另一个带有简单插槽的对象移动到一个新线程中,当我在新线程中的对象的插槽中做事情时,它工作得很好,但是当我再次将计时器的超时信号连接到我的

正如我在这篇文章中已经问过的,但没有得到答案,我需要在准确的时间获得一个事件,以便在QGraphicsview中拍摄场景,它正在播放一些动画,以便能够以30 fps的速度渲染到视频文件,计时器不精确,而且我使用了QTimeLine的frameChanged事件,但它也不精确!我想知道如何将QGraphicsview渲染成视频电影

对于另一个解决方案,我将计时器和另一个带有简单插槽的对象移动到一个新线程中,当我在新线程中的对象的插槽中做事情时,它工作得很好,但是当我再次将计时器的超时信号连接到我的主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;
}

请编辑您的问题以显示您当前使用的代码,最好是a。请编辑您的问题以显示您当前使用的代码,最好是a。
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