Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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
异步渲染到Qt-OpenGL窗口 我正在编写一个Windows Visual Studio 2017 C++程序,它将从捕获卡到Qt 5.9 OpenGL窗口呈现一系列帧。在线程中异步加载和处理图像,直到停止: void readFile(std::string filename) { auto reader = openreader(file); while(!done()) { QImage frame = reader.read(); processFrame(frame); displayFrame(frame); /// <--- here }_C++_Multithreading_Qt_Opengl - Fatal编程技术网

异步渲染到Qt-OpenGL窗口 我正在编写一个Windows Visual Studio 2017 C++程序,它将从捕获卡到Qt 5.9 OpenGL窗口呈现一系列帧。在线程中异步加载和处理图像,直到停止: void readFile(std::string filename) { auto reader = openreader(file); while(!done()) { QImage frame = reader.read(); processFrame(frame); displayFrame(frame); /// <--- here }

异步渲染到Qt-OpenGL窗口 我正在编写一个Windows Visual Studio 2017 C++程序,它将从捕获卡到Qt 5.9 OpenGL窗口呈现一系列帧。在线程中异步加载和处理图像,直到停止: void readFile(std::string filename) { auto reader = openreader(file); while(!done()) { QImage frame = reader.read(); processFrame(frame); displayFrame(frame); /// <--- here },c++,multithreading,qt,opengl,C++,Multithreading,Qt,Opengl,要将包含像素的QImage帧显示在屏幕上,正确的模式是什么?在.Net中,必须注意仅从主线程修改gui。Qt是如何工作的 当前的方法是将局部变量设置为等于帧的副本,然后在OpenGL QWidget上调用Update。也就是说,代码显示框看起来像: void displayFrame(QImage frame) { // Mutex here oglWindow.copyOfFrame= frame.copy(); oglWindow.update(); } 这将触发绘制到

要将包含像素的QImage帧显示在屏幕上,正确的模式是什么?在.Net中,必须注意仅从主线程修改gui。Qt是如何工作的

当前的方法是将局部变量设置为等于帧的副本,然后在OpenGL QWidget上调用Update。也就是说,代码显示框看起来像:

void displayFrame(QImage frame)
{
   // Mutex here
   oglWindow.copyOfFrame= frame.copy();
   oglWindow.update(); 
}
这将触发绘制到具有

painter.drawImage(QPoint(width()/2 - bi.width()/2, height()/2 - bi.height()/2), copyOfFrame);

当主窗口消息泵外的线程触发更新或需要其他机制时,这是否安全且合适?

如果异步映像加载程序是QThread的子类,则可以从映像加载程序向主线程发送信号,QT将确保在主线程中执行处理代码槽。请参阅Qt文档

如果映像加载程序不是QThread,只是一个普通的Win32线程,那么应该使用QCoreApplication::PostEvent进行线程安全传递

painter.drawImage(QPoint(width()/2 - bi.width()/2, height()/2 - bi.height()/2), copyOfFrame);