原创:Qt自定义拖放
#pragma once
#include <QTableView>
#include <QStandardItemModel>
#include <QTableWidget>
#include <QtGui>
#include <QDrag>
class DragTabel : public QTableView
{
public:
	DragTabel(QWidget *parent = 0);
	void AddItem(QString aName);
protected:
	void mousePressEvent(QMouseEvent *event);
	void mouseMoveEvent(QMouseEvent *event);
	void dragEnterEvent(QDragEnterEvent *event);
	void dragMoveEvent(QDragMoveEvent *event);
	void dropEvent(QDropEvent *event);
	void performDrag();
private:
	QStandardItemModel *m_pModel;
	QPoint startPos;
};
#include "DragTabel.h"
DragTabel::DragTabel( QWidget *parent /*= 0*/ ): QTableView(parent)
{
	m_pModel = new QStandardItemModel;
	m_pModel->setHorizontalHeaderItem(0,new QStandardItem(tr("name")));
	setModel(m_pModel);
	setAcceptDrops(true);
}
void DragTabel::AddItem( QString aName )
{
	m_pModel->appendRow(new QStandardItem(aName));
}
void DragTabel::mousePressEvent( QMouseEvent *event )
{
	if (event->button() == Qt::LeftButton)
		startPos = event->pos();
	QTableView::mousePressEvent(event);
}
void DragTabel::mouseMoveEvent( QMouseEvent *event )
{
	if (event->buttons() & Qt::LeftButton) {  
		int distance = (event->pos() - startPos).manhattanLength();  
		if (distance >= QApplication::startDragDistance())  
			performDrag();  
	}  
	QTableView::mouseMoveEvent(event);  
}
void DragTabel::dragEnterEvent( QDragEnterEvent *event )
{
	DragTabel *source = (DragTabel *)((void*)(event->source()));
	if (source && source != this) {
		event->setDropAction(Qt::MoveAction);
		event->accept();
	}
}
void DragTabel::dragMoveEvent( QDragMoveEvent *event )
{
	DragTabel *source = (DragTabel *)((void*)(event->source()));
	if (source && source != this) {
		event->setDropAction(Qt::MoveAction);
		event->accept();
	}
}
void DragTabel::dropEvent( QDropEvent *event )
{
	DragTabel *source = (DragTabel *)((void*)(event->source()));
	if (source && source != this) {
		AddItem(event->mimeData()->text());
		event->setDropAction(Qt::MoveAction);
		event->accept();
	}
}
void DragTabel::performDrag()
{
	if (1) {
		QMimeData *mimeData = new QMimeData;
		mimeData->setText(m_pModel->data(currentIndex()).toString());
		QDrag* drag = new QDrag(this);
		drag->setMimeData(mimeData);
		//drag->setPixmap(QPixmap(":/images/person.png"));
		if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
		{
		}
	}
}
然后就是支持自定义拖拽数据类型!
                    
                
                
            
        
浙公网安备 33010602011771号