QGraphicsSceneDragDropEvent отказывается срабатывать
Исследую QGraphicsSceneDragDropEvent, набросал вот такой код: mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtCore>
#include <QtGui>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneDragDropEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QGraphicsScene *scene;
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
qmyscene.h
#ifndef QMYSCENE_H
#define QMYSCENE_H
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QDebug>
#include <QGraphicsPixmapItem>
#include <QCursor>
#include <QGraphicsSceneDragDropEvent>
#include <QPushButton>
class QMyScene: public QGraphicsScene
{
Q_OBJECT
public:
explicit QMyScene(QObject *parent = 0);
~QMyScene();
private:
void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
};
#endif // QMYSCENE_H
qpixitem.h
#ifndef QPIXITEM_H
#define QPIXITEM_H
#include <QGraphicsItem>
#include "QGraphicsScene"
#include "mainwindow.h"
#include <QGraphicsPixmapItem>
class QPixItem: public QGraphicsPixmapItem
{
public:
QPixItem (QGraphicsScene *MyScene,int x,int y);
QGraphicsScene *MyScene;
int x,y;
};
#endif // QPIXITEM_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qmyscene.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QMyScene(this);
ui->graphicsView->setScene(scene);
//ui->graphicsView->setCursor(Qt::OpenHandCursor);
}
MainWindow::~MainWindow()
{
delete ui;
}
qmyscene.cpp
#include "qmyscene.h"
#include "qpixitem.h"
#include <qdebug.h>
#include <QMessageBox>
QMyScene::QMyScene(QObject *parent) : QGraphicsScene(parent)
{
QPixItem *pix1 = new QPixItem (this,100,100);
QPixItem *pix2 = new QPixItem (this,50,50);
}
QMyScene::~QMyScene()
{
}
void QMyScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
{
qDebug() << "Scene::есть движение";
QMessageBox msgBox;
msgBox.exec();
//QGraphicsScene::dragMoveEvent(event);
}
qpixitem.cpp
#include "qpixitem.h"
QPixItem::QPixItem (QGraphicsScene *MyScene,int x,int y): QGraphicsPixmapItem()
{
QPixmap pic (":/Items/OutLet.png");
this->setPixmap(pic);
this->setPos(x, y);
this->setZValue(10);
this->setAcceptDrops(true);
this->setFlags(QGraphicsItem::ItemIsMovable);
MyScene->addItem(this);
}
Идея проста, реализуется класс QMyScene наследуемый от QGraphicsScene в котором перегружается событие dragMoveEvent(QGraphicsSceneDragDropEvent) QGraphicsPixmapItem добавлены на сцену, у них есть флаг ItemIsMovable чтобы таскать их мышкой и setAcceptDrops(true) чтобы была какая-то реакция на перетаскивание (различные темы на форуме утверждают что это важно). Как утверждает справка dragMoveEvent(QGraphicsSceneDragDropEvent) срабатывает когда над сценой чего-то перетаскивают. Но вот я перетаскиваю а - void QMyScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) по какой-то причине не отрабатывает. Причем не важно какой код внутри, можно там делать не дебаг, а что угодно - работать не будет. Я посмотрел пример с роботом, на сайте Qt. У меня все один в один, как в примере, но результат нулевой - отчего это происходит ?