qt - 在 QGraphicsScene 中如何捕捉特定项目

Posted

技术标签:

【中文标题】qt - 在 QGraphicsScene 中如何捕捉特定项目【英文标题】:qt - In QGraphicsScene how to catch a particular item 【发布时间】:2010-06-18 16:09:14 【问题描述】:

我的QGraphicsScene 中有很多东西。情况是我正在创建一个棋盘,并且正在使用图形场景。所以QGraphicsScene 有很多QGraphicsPixmapItems。现在在这我怎么能得到国王。

更新: 在这个QGraphicsScene 中,我添加了QGraphicsPixmapItems,它们只不过是硬币(棋盘、国王、女王、士兵等)。现在如果我想移动一个特定的硬币,比如说金,那么我怎么能得到它。有一些方法,例如使用迭代器。但是有没有办法通过它的名字找到一个特定的QGraphicsPixmapItem

【问题讨论】:

你所说的“得到国王”是什么意思?请以定义和编程的方式输入。 硬币?你指的是碎片吗? 【参考方案1】:

当你说你需要得到国王时,你如何在你的程序中区分白色国王和黑色国王?

如果你需要一个 Pawn,你怎么知道是哪一个?任何人 ?您可以在您的项目中找到的第一个?

我没有想太多,但也许你可以做的是使用 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];

【讨论】:

感谢您的回答。我保留了两个向量而不是地图。

以上是关于qt - 在 QGraphicsScene 中如何捕捉特定项目的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 如何将 QGraphicsScene 缩放到 QGraphicsView

简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像

Qt等待用户在QGraphicsScene中选择项目

QT:QGraphicsView QGraphicsScene QGraphicsItem理解

如何在 QGraphicsScene 上进行选择?

Qt:选择的项目出现在 QGraphicsScene 的顶部