2010-06-18 10 views
1

J'ai tellement de choses dans mon QGraphicsScene. La situation est que je crée un échiquier, et utilise la scène graphique. Donc, le QGraphicsScene a tellement de QGraphicsPixmapItems. Maintenant, comment puis-je obtenir le roi.qt - Dans QGraphicsScene comment attraper un élément particulier

Mise à jour: Dans ce QGraphicsScene, j'ajoute QGraphicsPixmapItems qui ne sont que des pièces de monnaie (pension, roi, reine, soldats, etc.). Maintenant, si je veux déplacer une pièce particulière, dis King, alors comment puis-je l'obtenir. Il existe des méthodes comme l'utilisation d'itérateurs. Mais est-il un moyen de trouver un QGraphicsPixmapItem par son nom.

+0

Que voulez-vous dire par "obtenir le roi"? S'il vous plaît mettez-le en mode défini et de programmation. –

+0

pièces de monnaie? parlez-vous des pièces? – ssc

Répondre

0

Quand vous dites que vous devez obtenir le Roi, comment faites-vous la différence dans votre programme entre le Roi blanc et le Noir?

Si vous avez besoin d'un pion, comment savez-vous lequel? N'importe qui ? Le premier que vous pouvez trouver dans vos articles?

Je n'y ai pas beaucoup réfléchi, mais peut-être que ce que vous pouvez faire est d'utiliser un QMap. La clé serait une énumération des différentes pièces et la valeur serait un pointeur vers le QGraphicsItem. Quelque chose comme ceci:

enum Piece_e { 
    KING, 
    QUEEN, 
    ROOK1, 
    ROOK2, 
    ... 
    PAWN1, 
    PAWN2, 
    ... 
}; 

QMap<Piece_e, QGraphicsPixmapItem*> WhitePiecesItems; 
QMap<Piece_e, QGraphicsPixmapItem*> BlackPiecesItems; 

Lorsque vous créez votre scène et instancier vos morceaux, vous remplirez la carte:

... 
WhitePiecesItem[KING] = new QGraphicsPixmapItem(QPixmap("whiteking_pic")); 
WhitePiecesItem[PAWN1] = new QGraphicsPixmapItem(QPixmap("whitepawn_pic")); 
... 

BlackPiecesItem[QUEEN] = new QGraphicsPixmapItem(QPixmap("whitequeen_pic")); 
BlackPiecesItem[PAWN1] = new QGraphicsPixmapItem(QPixmap("whitepawn_pic")); 
... 

Lorsque vous avez besoin de trouver l'objet correspondant au roi blanc, vous pourrait faire quelque chose comme ceci:

QGraphicsPixmapItem* pItem = WhitePiecesItem[KING]; 
+0

Merci pour votre réponse. Au lieu de la carte j'ai gardé deux vecteurs. – prabhakaran