forked from openkylin/ukui-menu
开始菜单应用列表增加拖拽到任务栏功能
This commit is contained in:
parent
e61fcfa080
commit
42a09e95fd
|
@ -18,9 +18,11 @@
|
|||
#include "listview.h"
|
||||
#include "function_button_widget.h"
|
||||
#include "utility.h"
|
||||
#include "thumbnail.h"
|
||||
#include <QDebug>
|
||||
#include <QDesktopServices>
|
||||
#include <QtConcurrent/QtConcurrent>
|
||||
#include <QDrag>
|
||||
|
||||
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<QStringList>().at(0);
|
||||
QMimeData *mimeData = new QMimeData;
|
||||
ThumbNail *dragImage = new ThumbNail;
|
||||
QDrag *drag = new QDrag(this);
|
||||
QList<QUrl> 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<QStringList> data, int module)
|
||||
{
|
||||
this->module = module;
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue