qt - В QGraphicsScene как поймать конкретный предмет - PullRequest
1 голос
/ 18 июня 2010

У меня так много вещей в QGraphicsScene. Ситуация такова, что я создаю шахматную доску и использую графическую сцену. Так что у QGraphicsScene так много QGraphicsPixmapItems. Теперь в этом, как я могу получить короля.

Обновление: В этом QGraphicsScene я добавляю QGraphicsPixmapItems, которые являются ничем иным, как монетами (доска, король, королева, солдаты и т. Д.). Теперь, если я хочу переместить определенную монету, скажем, Кинг, то Как я могу ее получить. Есть несколько методов, таких как использование итераторов. Но есть ли способ найти конкретный QGraphicsPixmapItem по его имени.

1 Ответ

0 голосов
/ 21 июня 2010

Когда вы говорите, что вам нужно получить короля, как вы делаете разницу в своей программе между белым королем и черным?

Если вам нужна пешка, откуда вы знаете, какая? Кто-нибудь ? Первый, который вы можете найти в ваших товарах?

Я не особо задумывался об этом, но, возможно, вы можете использовать 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];
...