Вопрос

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

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

Это было полезно?

Решение

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

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

Я много не думал об этом, но, возможно, что вы можете сделать, это использовать 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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top