ホーム‎ > ‎Qt関連メモ‎ > ‎

QGraphicsViewのdropEventを使う

QGraphicsViewでdrop処理を行いたいが、dragEnterEventでacceptしても、dropEventが呼ばれない。
sceneが装着されているときは、dragMoveEventでイベントをSceneに渡してしまうからと書いてある。

たくさん書いてあってよくわからないが、dragMoveEventとdragLeaveEventを上書きすればいいらしい。

class GraphicsView : public QGraphicsView
{
    Q_OBJECT
public:
    GraphicsView( QWidget *parent = 0 )
     : QGraphicsView( parent )
    { 
        setAcceptDrops( true );
    }

protected:
    void dragEnterEvent( QDragEnterEvent *e )
    {
        e->accept();
    }
    void dropEvent( QDropEvent * e )
    {
        QList<QUrl> list = e->mimeData()->urls();
        foreach( QUrl url, list )
        {
            QString filename = url.toLocalFile();
            ...
            ...
        }
    }
    void dragMoveEvent( QDragMoveEvent *e ) {}
    void dragLeaveEvent( QDragLeaveEvent * e ) {}
};



Comments