zoukankan      html  css  js  c++  java
  • 原创: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)
    		{
    
    		}
    	}
    }
    

      然后就是支持自定义拖拽数据类型!

  • 相关阅读:
    JSP第六次作业
    JSP第五次作业
    第二次软件测试作业
    JSP第四次作业(2)
    JSP第四次作业(1)
    JSP第七次作业
    JSP第六次作业
    session对象练习
    JSP第四次作业(2)
    JSP第四次作业(1)
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/3118467.html
Copyright © 2011-2022 走看看