gpt4 book ai didi

c++ - 将自己的对象放入 QGraphicsScene

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:39 24 4
gpt4 key购买 nike

我想要基于图像的拖放功能。如果我拖放一个图像,我想知道我选择并移动了哪个图像(一个简单的 std::string 将唯一地标识该图像所代表的对象)。我的想法是将我自己的对象 (QPixmapItem) 存储在 QGraphicsScene 中:

#ifndef QPIXMAPITEM_H
#define QPIXMAPITEM_H

#include <QGraphicsPixmapItem>
#include <QPoint>

class QPixmapItem : public QGraphicsPixmapItem
{
public:
QPixmapItem(std::string path, std::string id, int x, int y);
std::string getIdentifier (){return this->identifier;}
QPoint getPosition () const{return this->position;}

private:
std::string identifier;
QPoint position;
};

#endif // QPIXMAPITEM_H

这是我用来将我的对象添加到场景中的方法:

void MainWindow::addPixmapItemToScene(std::string path, int x, int y)
{
// generate pixmap item & add it to the scene
QPixmapItem *item = new QPixmapItem(path, std::string("id123"), x, y);
ui->roomView->scene()->addItem(item);

// only update the affected area
ui->roomView->updateSceneRect(item->pixmap().rect());
}

下面是我如何尝试在 QMouseEvent 中“捕获”对象:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
std::cout << "mouse pressed" << std::endl;

QGraphicsPixmapItem *currentItem = dynamic_cast<QGraphicsPixmapItem *>(childAt(event->pos()));
if (!currentItem) {
return;
}
std::cout << "item pressed" << std::endl;
}

对象正在添加到场景中,但每当我按下它们时,最后一行(“按下的项目”)永远不会出现在屏幕上..

最佳答案

QGraphicsItem 已经支持在 QGraphicsScene 中通过拖放移动。您只需要设置 QGraphicsItem::ItemIsMovable旗帜。

如果您想在发生这种情况时得到通知,请覆盖 QGraphicsItem::itemChange()在您的自定义 QGraphicsItem 中。

关于c++ - 将自己的对象放入 QGraphicsScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com