Ein Freund von mir und ich versuchen, ein Spiel in C++ mit Qt zu erstellen. Wir möchten einige QGraphicsTextItem
in einem QMap
speichern, um während der Laufzeit darauf zuzugreifen. Ich habe die relevanten Teile unseres Codes hier eingefügt, und unser Problem ist, dass das Programm nicht mehr reagiert.Anwendung reagiert nicht mehr, wenn QMap zum Speichern von Objekten verwendet wird
Game.cpp
int players = 6;
QGraphicsRectItem * overviewBox = new QGraphicsRectItem();
overviewBox->setRect(0, 0, 782, 686);
scene->addItem(overviewBox);
for(int i = 1; i <= players; i++) {
Container * ovContainer = new Container(overviewBox);
ovContainer->Overview(i, faceNo);
ovContainer->setPos(0, 0 + 110 * (i - 1));
info->textBoxMap[i-1] = ovContainer->textBox->playerText; // Program stops responding here
}
GameInfo.h
#ifndef GAMEINFO_H
#define GAMEINFO_H
#include "TextBox.h"
#include <QMap>
class GameInfo {
public:
GameInfo();
QMap<int, QGraphicsTextItem *> textBoxMap;
};
#endif // GAMEINFO_H
Keiner von uns haben viel Erfahrung mit C++ oder Qt, und wir würden jede Hilfe dankbar.
Eigentlich können Sie [operator []() 'zum Einfügen] (http://doc.qt.io/qt-5/qmap.html#details) Elemente in' QMap' verwenden. – thuga
@thuga ja +1 für die ref, ich kann nie entscheiden, welche besser aussieht ... einfügen scheint mehr "korrekt", wenn ein neuer Wert hinzugefügt wird, operator []() scheint mehr "korrekt" beim Ändern eines vorhandenen Wertes und das ist wie Ich neige dazu, sie zu benutzen ... aber tatsächlich (wie Sie sich entzogen haben) machen beide das gleiche, obwohl ich die Versammlung nicht angeschaut habe, um zu sehen, ob sie identisch sind. –
Die Verwendung von [] kann gefährlich sein, da Elemente hinzugefügt werden, wenn sie nicht vorhanden sind. Deshalb vermeide ich es meistens die meiste Zeit. – thuga