我正在Qt的游戏中工作。 我的角色/对象存储在我的模型类中(我尝试遵循MVC模型)。
我创建了一个包含每个对象的QMap:
QMap<int, Safe*> *safes;
QMap<int, Mushroom*> *mushroom;
QMap<int, Floor*> *floors;
但是我想在我的Controller中检索所有这些QMap并将它从控制器发送到我的View的paintEvent()类。 有没有办法将QMap存储在QList中,如下所示:
QList<QMap<int, void*>>
然后施展它?我正在寻找一种从单个对象访问这些QMap的方法。
感谢您的帮助!
答案 0 :(得分:3)
您可以使用结构将它们捆绑在一个对象中:
int id = parameter.ID;
CustomTableItemProvider provider = new CustomTableItemProvider(CMSContext.CurrentUser);
entity = provider.GetItem(id, TrainingPlanConstants.TrainingPlanTableName);
虽然指向QMap是有效的,但如果你不需要指向它,那么我会反对它。
struct Maps
{
QMap<int, Safe*> *safes;
QMap<int, Mushroom*> *mushroom;
QMap<int, Floor*> *floors;
};
这样你就不必担心堆分配/解除分配。
如果您的编译器支持C ++ 11,那么您可以使用std::tuple将项目组合在一起。
struct Maps
{
QMap<int, Safe*> safes;
QMap<int, Mushroom*> mushroom;
QMap<int, Floor*> floors;
};
答案 1 :(得分:1)
首先,是的,您可以使用QList
来实现此目的,但我建议先创建一个接口类,然后在QMap
中使用它。
struct GameObjectInterface {
};
class Safe : public GameObjectInterface {};
class Mushroom : public GameObjectInterface {};
class Floor : public GameObjectInterface {};
QMap<int, GameObjectInterface*> _GameObjects;
// Is game object with ID `n` a `Safe`?
Safe* s = dynamic_cast<Safe*>(_GameObjects[n]);
if (s != nullptr) {
// Yes it is a safe
}
另一种可能性:
QList<QMap<int, GameObjectInterface*>> _GameObjects;
如果你想要,你可以把所有东西都塞进一个结构中,如其他响应者所暗示的那样。
struct MyGameObject {
QMap<int, Safe*> Safes;
QMap<int, Mushrooms*> Mushrooms;
QMap<int, Floor*> Floors;
};
QList<MyGameObject> _GameObjects;
如果每个都是相关的(所有对象的相同键),它可以简化为:
struct MyGameObject {
Safe* _Safe;
Mushrooms* _Mushroom;
Floor* _Floor;
};
QMap<int, MyGameObject*> _GameObjects;
答案 2 :(得分:0)
您可以为所有特定对象保留指向基类的指针:
QMap<int, MyBaseClass*> allObjects;