首先,我要尝试从所有POV来看这个问题。我也曾在freenode上问过,有人向我提出了一些建议,但最后却发现这些建议可能行不通。

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

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

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

假设您想为battleship等基于网格的游戏创建可重用组件。

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

内部的构件本身(填充的QGraphicsRectItem或“空”的构件)应由布局类管理。默认情况下可以使用QGraphicsGridLayout,但是它应该允许插入自定义布局。这将允许新的2D布局,例如等轴测图。

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

请记住,小部件本身可以放在风景内部。

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

注意:已经退出的类/框架/其他都可以,但是请记住,我不想为Windows用户分发大于3-4 Mb的库。

最佳答案

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

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

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

3)“网格”块继承自QGraphicsPolygonItemQGraphicsLayoutItem。这是将网格项定义为多边形的更通用方法。您可以具有矩形,菱形,六边形等形状。如果希望将对象网格化为以正方形网格方式排列的磁盘(例如,参见Sane游戏),则可以创建一个特殊的“网格”块项包含(作为儿童)QGraphicsEllipseItem

关于c++ - QGraphicsScene和QGraphicsWidget(可重用和可嵌入),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5536947/

10-10 16:37