dragとdropは別々のものと考えること
dropに必要な3要件:
- acceptDrops = True であること
- dragEnterEvent()がオーバーライドされていること
- dropEvent()がオーバーライドされていること
1. acceptDrops = Trueであること
QWidgetクラスのメンバ変数、初期値はFalse。widgetのdrop可否を決定する変数。
setAcceptDrops()で変更
QWidget Class | Qt Widgets 5.5
2. dragEnterEvent()がオーバーライドされていること
dragがwidgetの境界に侵入したとき実行される関数
QWidgetクラスの仮想関数、なので初期状態では空っぽの状態。これを実装して境界進入時の動作を規定。
QWidget Class | Qt Widgets 5.5
3. dropEvent()がオーバーライドされていること
dragが離される、つまりdropしたときに実行される関数
QWidgetクラスの仮想関数、なので初期状態では空っぽの状態。これを実装して境界進入時の動作を規定。
QWidget Class | Qt Widgets 5.5
PyQt5でのDrag and Dropについて詳しく扱っているサイト: This Page Intentionally: Qt's Drag-and-Drop Architecture for Python and PyQt5 Index page
その中でdropに関する章: This Page Intentionally: Qt's Drag-and-Drop Architecture for Python and PyQt5Pt. 2, The Drop Target