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];
Другие вопросы по тегам