【问题标题】:QGraphicsScene and QGraphicsWidget (reusable and embeddable)QGraphicsScene 和 QGraphicsWidget(可重用和可嵌入)
【发布时间】:2011-04-06 21:56:18
【问题描述】:

首先我应该说我已经尝试从所有 POV 中看待这个问题。我也在freenode上问过,有人建议我一些东西,但最后结果证明这些建议不可能奏效。

在我看来,那些提出建议的人并不真正了解类层次结构和概念层次结构。

话虽如此,我已经多年没有使用 Qt,所以请多多包涵。

我想做的是一个可以坐在风景QGraphicsScene上的图形项(QGraphicsWidget,...Item,随便,我不知道应该从哪个类继承)。

假设您想为像battleship 这样的基于网格的游戏创建一个可重复使用的组件。

此小部件中的新对象(如战舰)可以表示为位矩阵并动态创建/插入。

其中的构建块本身(填充的 QGraphicsRectItem 或“空”的)应该由布局类管理。默认情况下可以为 QGraphicsGridLayout 提供服务,但它应该允许插入自定义布局。这将允许新的 2D 布局,例如等距。

在小部件内部进行布局还可以简化在此小部件之上的游戏开发,因为您将有方法 itemAt() 和层来组织“网格”上的对象。

请记住,小部件本身可以位于风景中。

那么哪些概念(网格小部件、网格块、网格布局)应该继承自哪些 qt4 (4.7.2) 类?

注意:已经退出的类/框架/其他内容也可以,但请记住,我不想为 Windows 用户分发厚度超过 3-4 Mb 的库。

【问题讨论】:

    标签: c++ qt qt4


    【解决方案1】:

    根据您的描述,我建议将三个基本概念实现为:

    1) “grid”小部件继承自QGraphicsWidget,因为它支持添加布局。如果你和QGraphicsItem一起去,你将需要重新实现布局机制,这真的很痛苦。网格根据“网格”布局提供的“网格”形状创建“网格”块。

    2) “网格”布局继承自QGraphicsLayout。您应该几乎可以直接使用QGraphicsGridLayout 来制作简单的方格游戏。您将不得不创建新的子类来处理其他类型的网格形状。在这个类中你应该有一个明显的特征是网格块的形状(正方形、六边形、菱形)的定义。这个以QPolygon 给出的定义可用于创建形状正确的网格块。

    3) “网格”块继承自 QGraphicsPolygonItem QGraphicsLayoutItem。这是将网格项定义为多边形的更通用方法。你可以有矩形、菱形、六边形等。如果你想让你的网格对象以方形网格方式排列(参见 Sane 游戏),你可以创建一个特殊的“网格”块项目,它包含(作为孩子)QGraphicsEllipseItem

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      相关资源
      最近更新 更多