Мой друг и я пытаемся создать игру на C++ с помощью Qt. Мы хотим сохранить несколько QGraphicsTextItem
в QMap
для доступа к ним во время выполнения. Здесь я вставил соответствующие части нашего кода, и наша проблема заключается в том, что программа перестает отвечать на запросы.Приложение перестает отвечать при использовании QMap для хранения объектов
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
Никто из нас не имеют большого опыта работы с использованием C++ или Qt, и мы будем благодарны за любую помощь.
На самом деле вы можете [использовать 'operator []()' to insert] (http://doc.qt.io/qt-5/qmap.html#details) элементы в 'QMap'. – thuga
@thuga yes +1 для ref, я не могу решить, какой выглядит лучше ... insert добавляет новое значение, добавляет новое значение, оператор []() кажется более «правильным» при изменении существующего значения, и вот как Я обычно использую их ... но на самом деле (как вы ускользали) они оба делают то же самое, хотя я не смотрел на сборку, чтобы увидеть, идентичны ли они. –
Использование [] может быть опасным, поскольку оно добавляет элементы, если они не существуют. Вот почему я обычно избегаю этого большую часть времени. – thuga