QGraphicsScene和QGraphicsWidget(可重用和可嵌入)

时间:2011-04-04 09:59:12

标签: c++ qt qt4

我应该首先说我试图从所有POV中查看这个问题。我还询问了freenode,并向我提出了一些建议,但最终证明这些建议无法奏效。

在我看来,好像提出建议的人并不真正知道类层次结构和概念层次结构是什么样的。

话虽如此,我多年没有使用过Qt了,所以请耐心等待。

我想要制作的是一个图形项目(QGraphicsWidget,......项目,无论如何,我不知道它应该从哪个类继承),它们可以坐在风景QGraphicsScene上。

想象一下,您想为battleship等基于网格的游戏创建可重用的组件。

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

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

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

请记住,小部件本身可以坐在风景中。

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

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

1 个答案:

答案 0 :(得分:2)

根据您的描述,我建议实施以下三个基本概念:

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

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

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