Я хотел бы иметь функцию перетаскивания на основе изображений. Если я перетаскиваю изображение, я хотел бы знать, какое изображение я выбрал и переместил (простая 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;
}
Объекты добавляются на сцену, но всякий раз, когда я нажимаю на них, последняя строка («нажатие элемента») никогда не появляется на экране ..