Qt OpenGL 数据同步/模型/视图实现

Posted

技术标签:

【中文标题】Qt OpenGL 数据同步/模型/视图实现【英文标题】:Qt OpenGL data synchronization / Model/View implementation 【发布时间】:2015-11-14 17:22:19 【问题描述】:

我正在尝试使用 Qt 5.5 和 OpenGL 开发应用程序。该应用程序的基本工作是加载简单对象,修改它们在场景中的位置,并将它们与其他属性(材质、名称、父/子关系等)一起保存。

我现在唯一苦恼的一件事是我真的不知道我应该如何处理同步数据的问题。假设我有某种处理所有场景对象的 SceneGraph 类。这些 SceneGraph 应该在 SceneView-Widget 中呈现,该小部件可用于通过转换修改其对象。现在我如何告诉每个 SceneView 对象改变了它的位置?

我想了一会儿模型/视图架构,但我不确定这个实现应该是什么样子。

在不同的 Windows/Widgets 中处理类似对象但仍然只有一个数据的最佳方法是什么?

场景对象:

保存网格信息(verticies、uvs 等) 有一个名字(QString) 有材质 具有存储位置、旋转和缩放信息的变换 (重要提示:这些数据类型应在所有视图中同步)

场景图:

包含不同的SceneObjects并传递给SceneViews

场景视图:

负责在任何 QWindow 中正确绘制场景的 QWidget。 有自己的摄像头可以四处移动。 处理用户输入并允许转换场景对象。

【问题讨论】:

【参考方案1】:

您可以使用信号和槽来观察SceneObjects的位置更新并在SceneView中处理它们。

【讨论】:

以上是关于Qt OpenGL 数据同步/模型/视图实现的主要内容,如果未能解决你的问题,请参考以下文章

Qt入门教程数据模型篇模型/视图教程

Qt入门教程数据模型篇模型/视图教程

在 Qt 模型/视图中修改数据表示

在 Qt 中使用不同模型访问另一个列表视图的委托中的列表视图模型数据

求助编程实现数据库同步问题(java)

在不同的线程中拥有 Qt 只读模型和视图