diff --git a/src/UserInterface/ListView/listview.cpp b/src/UserInterface/ListView/listview.cpp index 89be87b..3ec9cd7 100755 --- a/src/UserInterface/ListView/listview.cpp +++ b/src/UserInterface/ListView/listview.cpp @@ -18,9 +18,11 @@ #include "listview.h" #include "function_button_widget.h" #include "utility.h" +#include "thumbnail.h" #include #include #include +#include ListView::ListView(QWidget *parent/*, int width, int height, int module*/): KListView(parent) @@ -29,6 +31,7 @@ ListView::ListView(QWidget *parent/*, int width, int height, int module*/): this->h = 540; this->module = 1; initWidget(); + setDragEnabled(true); setAttribute(Qt::WA_AcceptTouchEvents); m_listmodel = new QStandardItemModel(this); this->setModel(m_listmodel); @@ -47,6 +50,7 @@ ListView::~ListView() void ListView::initWidget() { setAttribute(Qt::WA_TranslucentBackground); + this->setAcceptDrops(true); viewport()->setAttribute(Qt::WA_TranslucentBackground); viewport()->setAutoFillBackground(false); this->setSelectionMode(QAbstractItemView::SingleSelection); @@ -70,6 +74,34 @@ void ListView::initWidget() connect(this, &ListView::clicked, this, &ListView::onClicked); } +void ListView::mouseMoveEvent(QMouseEvent *e) +{ + if (e->buttons() & Qt::LeftButton) { + if ((e->pos() - m_pressPos).manhattanLength() >= QApplication::startDragDistance()) { + myDebug() << "进入拖拽事件"; + QString desktopfp = m_pressApp.value().at(0); + QMimeData *mimeData = new QMimeData; + ThumbNail *dragImage = new ThumbNail; + QDrag *drag = new QDrag(this); + QList desktopUrlList; + desktopUrlList.append(QUrl(desktopfp)); + myDebug() << desktopUrlList; + mimeData->setUrls(desktopUrlList); + //设置拖拽时的缩略图 + dragImage->setupthumbnail(desktopfp); + QPixmap pixmap = dragImage->grab(); + pixmap = pixmap.scaled(QSize(32, 32), Qt::KeepAspectRatio); + myDebug() << mimeData; + drag->setMimeData(mimeData); + drag->setPixmap(pixmap); + drag->setHotSpot(QPoint(pixmap.width(), pixmap.height())); + drag->exec(Qt::MoveAction); + delete dragImage; + dragImage = nullptr; + } + } +} + void ListView::addData(QVector data, int module) { this->module = module; diff --git a/src/UserInterface/ListView/listview.h b/src/UserInterface/ListView/listview.h index f9125e8..6a26210 100755 --- a/src/UserInterface/ListView/listview.h +++ b/src/UserInterface/ListView/listview.h @@ -50,11 +50,14 @@ protected: void paintEvent(QPaintEvent *e) override; void keyPressEvent(QKeyEvent *e); bool event(QEvent *e); + void mouseMoveEvent(QMouseEvent *e); + private: int w = 0; int h = 0; int m_preRowCount; bool m_scrollbarState = true; + QPoint m_pressPos; private Q_SLOTS: