www.pudn.com > chap09.rar > projectlistwidget.cpp


#include  
 
#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()) 
            startDrag(); 
    } 
    QListWidget::mouseMoveEvent(event); 
} 
 
void ProjectListWidget::dragEnterEvent(QDragEnterEvent *event) 
{ 
    ProjectListWidget *source = 
            qobject_cast(event->source()); 
    if (source && source != this) { 
        event->setDropAction(Qt::MoveAction); 
        event->accept(); 
    } 
} 
 
void ProjectListWidget::dragMoveEvent(QDragMoveEvent *event) 
{ 
    ProjectListWidget *source = 
            qobject_cast(event->source()); 
    if (source && source != this) { 
        event->setDropAction(Qt::MoveAction); 
        event->accept(); 
    } 
} 
 
void ProjectListWidget::dropEvent(QDropEvent *event) 
{ 
    ProjectListWidget *source = 
            qobject_cast(event->source()); 
    if (source && source != this) { 
        addItem(event->mimeData()->text()); 
        event->setDropAction(Qt::MoveAction); 
        event->accept(); 
    } 
} 
 
void ProjectListWidget::startDrag() 
{ 
    QListWidgetItem *item = currentItem(); 
    if (item) { 
        QMimeData *mimeData = new QMimeData; 
        mimeData->setText(item->text()); 
 
        QDrag *drag = new QDrag(this); 
        drag->setMimeData(mimeData); 
        drag->setPixmap(QPixmap(":/images/person.png")); 
        if (drag->start(Qt::MoveAction) == Qt::MoveAction) 
            delete item; 
    } 
}