virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if( QLineF(event->screenPos(), event->buttonDownScreenPos(Qt::LeftButton)).length() < QApplication::startDragDistance()) return; QDrag* drag = new QDrag( event->widget() ); QMimeData *mimeptr = new QMimeData(); ConnectableItem *_this = this; QByteArray data; QDataStream stream( &data, QIODevice::WriteOnly ); stream.writeRawData( (const char*) &_this, sizeof( _this ) ); mimeptr->setData( ITEMDRAGMIMETYPE, data ); // ITEMDRAGMIMETYPE это #define-d псевдо-майм-тип drag->setMimeData( mimeptr ); drag->setPixmap( QPixmap( pic ) ); // pic это указатель на строку с именем картинки в ресурсах приложения drag->exec(); }
void DragDropScene::dropEvent( QGraphicsSceneDragDropEvent *event ){ ConnectableItem* item; QByteArray data = event->mimeData()->data( ITEMDRAGMIMETYPE ); QDataStream stream( &data, QIODevice::ReadOnly ); stream.readRawData( (char*) &item, sizeof( item ) ); item->setPos( event->scenePos() ); addItem( item ); update();}
void DragDropScene::dragEnterEvent( QGraphicsSceneDragDropEvent *event ){ if( event->mimeData()->hasFormat( ITEMDRAGMIMETYPE )) event->acceptProposedAction();}void DragDropScene::dragMoveEvent( QGraphicsSceneDragDropEvent *event ){ dragEnterEvent( event );}