到目前为止,我了解到我们在 QML 中有两个线程,我们的主应用程序线程和我们的“场景图”线程:http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html
我借助此链接实现了自己的 vtkQmlItem :http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html
我注意到我的 vtkscene 仅在以下情况下呈现afterrendering
信号由 qml 流发出。
到目前为止,一切都很好并且工作完美,我可以看到我的 vtk 场景,甚至可以与之交互。
但我也想以编程方式渲染我的 vtk 场景,因为我想通过围绕 vtk 对象移动相机来制作动画。
Calling renderer->render()
直接显示很多vtk错误,并且似乎不是这样做的好方法。
Calling this->window()->update()
当我希望立即处理事件时,似乎将事件放入 eventLoop 中。我设法使其立即工作的唯一方法是使用 QApplication::processEvents(),这是我不喜欢的黑客方法,并且会喜欢另一种解决方案。
所以我不喜欢的工作解决方案的伪代码如下:
for (int i = 0; i < 50; i++)
{
ChangeCameraPosition(i); // Change the position and orientation of the vtk camera
this->window()->update();
QApplication::processEvents(); // The hack I don't like
QThread::msleep(500);
}
对于使用 Qt QuickControls 2 和 VTK 8 寻找解决方案的人,您可以在此存储库中找到一个工作示例https://github.com/nicanor-romero/QtVtk https://github.com/nicanor-romero/QtVtk以及自述文件中的构建说明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)