2016-06-19 4 views
3

私の友人で、Qtを使用してC++でゲームを作ろうとしています。実行時にアクセスするためにQMapに2,を保存する必要があります。ここでコードの関連部分を貼り付けました。問題はプログラムが応答しなくなることです。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のを使用して多くの経験を持っていない、と私たちは任意の助けをいただければ幸いです。

答えて

2

コードスニペットにコードがない場合を除き、QMapは正しく使用されていません。 QMapのアイテムはまだ割り当てられていないと思いますか? - したがって、範囲外の(つまり、まだ存在しない)要素にアクセスしています。

は、次のように(Qtのページから取られた)あなたは、インサートを(使用することができますQMap)にアイテムを追加するには:

QMap<int, QString> map; 
map.insert(1, "one"); 
map.insert(5, "five"); 
map.insert(10, "ten"); 

その後戻って自分の価値観を読むために:

QString str = map[1]; 
//or 
QString str2 = map.value(5); 

あなたドン「Tは、ループのためではなく、あなたが行うことができ、あなたのコードを使用して繰り返し処理する必要があります。

for(int i = 1; i <= players; i++) 
{ 
     : 
     : 
    info->textBoxMap.insert(i, ovContainer->textBox->playerText); 
} 

ノート

あなたは同じキーを持つ項目を挿入したい場合は、あなたがそうでなければあなただけの、キーの値が上書きされます例えば、insertMulti(...)を使用する必要があります。ここでは

QMap<int, QString> map; 
map.insert(1, "test1"); 
map.insert(1, "test2"); 

map[1]は「TEST2」を返します。 。しかし、私はあなたのプレイヤーがすべてユニークなインデックスになると思うので、これがあなたの望むものだとは思っていません...しかし、同じインデックスのがその値をちょうど上書きしていることを指摘しておく価値があります。

+3

実際には、[operator []() 'を使用して、[QMap]にアイテムを挿入できます(http://doc.qt.io/qt-5/qmap.html#details)。 – thuga

+0

@thugaはい+1を参照すると、私は決して決めることはできません...新しい値を追加するときに挿入がもっと「正しい」ように見えますが、演算子[]()は既存の値を変更するときには "正しい"私はそれらを使用する傾向があります....しかし、実際に(あなたが逃げたように)彼らは同じことをしていますが、私はアセンブリが同じかどうかを見ていない。 –

+1

[]を使用すると、アイテムが存在しない場合はアイテムが追加されるため、危険です。だからこそ私は一般的にそれをほとんど避けているのです。 – thuga

関連する問題