1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| class DraggableListWidget : public QScrollArea { Q_OBJECT public: DraggableListWidget(QWidget* parent, QString mimetype, int padding = 19, QMargins margins = QMargins(0,0,0,0), QListView::Flow direction = QListView::TopToBottom); int getSize();
void addItem(QWidget* item); void insertItem(int index, QWidget* item); void removeItem(int index); QWidget* getItem(int index); void moveItem(int source, int target); std::vector<QWidget*>& getItems(); signals: void swapItem(int source, int target, int parent_index);
protected: void dragEnterEvent(QDragEnterEvent * event) override; void dragMoveEvent(QDragMoveEvent* event) override; void dropEvent(QDropEvent* event) override; void dragLeaveEvent(QDragLeaveEvent* event) override;
public slots: std::vector<std::pair<QWidget*, QPoint>> update_() { if (is_dragging) { } else { } list_widget->setWidgetPosition(widget_and_position); } void asyncUpdate() { QTimer::singleShot(0, this, [this]() { update_(); }); }
private: std::vector<QWidget*> items; AnimeListWidget* list_widget = nullptr; std::unique_ptr<DropPlaceholder> drop_placeholder; QString mimetype; int calculateDropIndex(const QPoint& position) { } };
|