qt - 如何以编程方式在 qml 中渲染 vtk 项?

标签 qt opengl events qml vtk

到目前为止,我了解到我们在 QML 中有两个线程,我们的主应用程序线程和我们的“场景图”线程:http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html

我借助此链接实现了自己的 vtkQmlItem:http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html

我注意到我的 vtkscene 仅在 qml 流发出 afterrendering 信号时才会渲染。

到目前为止,一切都很好并且工作完美,我可以看到我的 vtk 场景,甚至可以与之交互。

但我也想以编程方式渲染我的 vtk 场景,因为我想通过围绕 vtk 对象移动相机来制作动画。

直接调用renderer->render()会显示很多vtk错误,并且似乎不是这样做的好方法。

当我希望立即处理事件时,调用 this->window()->update() 似乎将事件放入 eventLoop 中。我设法让它立即工作的唯一方法是使用 QApplication::processEvents(),这是我不喜欢的一种 hack,并且会喜欢另一种解决方案。

所以我不喜欢的工作解决方案的伪代码如下:

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 中找到一个工作示例。在自述文件中包含构建说明。

关于qt - 如何以编程方式在 qml 中渲染 vtk 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685872/

相关文章:

qt - Qt4 中的 URL 编码

visual-studio - 使用 Visual Studio 构建可以链接到 Qt 项目的库?

c++ - 从帧缓冲区读取像素数据

linux - 为什么以非 root 身份运行时 linux opengl 应用程序的性能会差很多?

java - 我可以从 osgi 控制台获取有关捆绑服务的哪些信息?

c++ - 如何从 QString 设置 Q_ENUM

c++ - 如何调整 QVBoxLayout 的大小以填充没有空格的表单?

java - 如何从 GUI 启动 Jzy3d 图?

javascript - Android 浏览器仍然使用在 Javascript 中创建事件的旧方法

jquery - jquery 中没有触发事件,什么问题?