#include "projectlistwidget.h"
ProjectListWidget::ProjectListWidget(QWidget *parent)
: QListWidget(parent)
{
setAcceptDrops(true);
}
void ProjectListWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
startPos = event->pos();
QListWidget::mousePressEvent(event);
}
void ProjectListWidget::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton)
{
int distance = (event->pos() - startPos).manhattanLength();
if (distance >= QApplication::startDragDistance())
performDrag();
}
QListWidget::mouseMoveEvent(event);
}
void ProjectListWidget::performDrag()
{
QListWidgetItem *item = currentItem();
if (item)
{
qDebug() << "performDrag";
QMimeData *mimeData = new QMimeData;
mimeData->setText(item->text());
QDrag *drag = new QDrag(this);//
drag->setMimeData(mimeData);
// drag->setPixmap(QPixmap(":/images/person.png"));
if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
delete item;
}
}
void ProjectListWidget::dragMoveEvent(QDragMoveEvent *event)
{
ProjectListWidget *source = qobject_cast<ProjectListWidget *>(event->source());
if (source && source != this)
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void ProjectListWidget::dropEvent(QDropEvent *event)
{
qDebug() << "dropEvent";
ProjectListWidget *source = qobject_cast<ProjectListWidget *>(event->source());
if (source && source != this)
{
addItem(event->mimeData()->text());
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void ProjectListWidget::dragEnterEvent(QDragEnterEvent *event)
{
qDebug() << "dragEnterEvent";
event->accept();
}
qt实现拖放效果demo
需积分: 5 103 浏览量
2022-02-02
19:44:33
上传
评论
收藏 6KB ZIP 举报
码农客栈
- 粉丝: 1157
- 资源: 34
评论0