#include #include #include #include #include class MyListWidget : public QListWidget { public: MyListWidget(QWidget *parent = nullptr) : QListWidget(parent) { setDragEnabled(true); setAcceptDrops(true); setDragDropMode(QAbstractItemView::DragDrop); setDefaultDropAction(Qt::MoveAction); setDropIndicatorShown(false); } protected: void dropEvent(QDropEvent *event) override { if (event->source() == this && event->proposedAction() == Qt::CopyAction) { auto row = indexAt(event->position().toPoint()).row(); if (row == -1) { row = model()->rowCount(); } model()->insertRow(row, {}); model()->setData(model()->index(row, 0), "--- BEGIN COPY ---"); model()->dropMimeData(event->mimeData(), Qt::CopyAction, row + 1, 0, {}); model()->insertRow(row + 2, {}); model()->setData(model()->index(row + 2, 0), "--- END COPY ---"); event->acceptProposedAction(); } // else { QListWidget::dropEvent(event); // } } }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { mListWidget = new MyListWidget(this); for (int i = 0; i < 3; ++i) { mListWidget->addItem("Item_" + QString::number(i)); } setCentralWidget(mListWidget); } private: MyListWidget *mListWidget; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } #include "main.moc"