qt - В QGraphicsScene как поймать конкретный предмет
У меня так много вещей в моем QGraphicsScene
, Ситуация такова, что я создаю шахматную доску и использую графическую сцену. Итак QGraphicsScene
так много QGraphicsPixmapItems
, Теперь в этом, как я могу получить короля.
Обновление: в этом QGraphicsScene
Я добавляю QGraphicsPixmapItems
это не что иное, как монеты (доска, король, королева, солдаты и т. д.). Теперь, если я хочу переместить определенную монету, скажем, Кинг, то Как я могу ее получить. Есть несколько методов, таких как использование итераторов. Но есть ли способ найти конкретный QGraphicsPixmapItem
по его имени.
1 ответ
Когда вы говорите, что вам нужно получить короля, как вы делаете разницу в своей программе между белым королем и черным?
Если вам нужно получить пешку, откуда вы знаете, какая? Кто-нибудь? Первый, который вы можете найти в ваших товарах?
Я не много думал об этом, но, возможно, вы можете использовать QMap. Ключом будет перечисление различных частей, а значением будет указатель на соответствующий QGraphicsItem
, Что-то вроде этого:
enum Piece_e {
KING,
QUEEN,
ROOK1,
ROOK2,
...
PAWN1,
PAWN2,
...
};
QMap<Piece_e, QGraphicsPixmapItem*> WhitePiecesItems;
QMap<Piece_e, QGraphicsPixmapItem*> BlackPiecesItems;
Когда вы создаете свою сцену и создаете свои экземпляры, вы заполняете карту:
...
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"));
...
Когда вам нужно найти объект, соответствующий белому королю, вы можете сделать что-то вроде этого:
QGraphicsPixmapItem* pItem = WhitePiecesItem[KING];