qt - In QGraphicsScene come catturare un particolare elemento
-
28-09-2019 - |
Domanda
Ho così tante cose nella mia QGraphicsScene
. La situazione è sto creando una scacchiera, e sta usando scena grafica. Così il QGraphicsScene
sta avendo tanti QGraphicsPixmapItems
. Ora, in questo come posso ottenere il Re.
Aggiornamento:
In questo QGraphicsScene
, sto aggiungendo QGraphicsPixmapItems
che non sono altro che le monete (bordo, re, regina, soldati, ecc). Ora, se voglio spostare una particolare moneta dire re, allora come posso farlo. Ci sono alcuni metodi come l'utilizzo di iteratori. Ma esiste un modo per trovare un particolare QGraphicsPixmapItem
per il suo nome.
Soluzione
Quando si dice è necessario per ottenere il re, come si fa a fare la differenza nel vostro programma tra il re bianco e quello nero?
Se avete bisogno di ottenere un pedone, come fai a sapere quale? Chiunque? La prima si possono trovare nei tuoi oggetti?
Non ho pensato molto su di esso, ma forse quello che si può fare è utilizzare un QMap. La chiave sarebbe un'enumerazione dei diversi pezzi e il valore sarebbe un puntatore alla QGraphicsItem
rilevanti. Qualcosa di simile a questo:
enum Piece_e {
KING,
QUEEN,
ROOK1,
ROOK2,
...
PAWN1,
PAWN2,
...
};
QMap<Piece_e, QGraphicsPixmapItem*> WhitePiecesItems;
QMap<Piece_e, QGraphicsPixmapItem*> BlackPiecesItems;
Quando si crea la scena e instanciating tuoi pezzi, si riempiono la mappa:
...
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"));
...
Quando hai bisogno di trovare l'oggetto corrispondente al re bianco, si potrebbe fare qualcosa di simile:
QGraphicsPixmapItem* pItem = WhitePiecesItem[KING];