博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原创:Qt自定义拖放
阅读量:6677 次
发布时间:2019-06-25

本文共 2311 字,大约阅读时间需要 7 分钟。

#pragma once#include 
#include
#include
#include
#include
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)		{		}	}}

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

 

转载地址:http://xnyao.baihongyu.com/

你可能感兴趣的文章
Windows Mobile上的HTML解析器
查看>>
Linux系统时间与RTC时间【转】
查看>>
Android -- isInEditMode
查看>>
JavaScript: JavaScript的简介和入门代码演示
查看>>
Windows Phone 7 开发 视频资料
查看>>
iOS:一些常用的框架
查看>>
Android开发环境——Eclipse ADT相关内容汇总
查看>>
C语言-函数
查看>>
Objective-C:用命令行参数的格式对文件进行IO操作
查看>>
一道算法题,看看大家的思路
查看>>
微软发布Project Oxford,供Azure户免费集多项功能
查看>>
Tslib触摸屏官网【转】
查看>>
Android——BitMap(位图)相关知识总结贴
查看>>
JAVA8之日期操作详解
查看>>
JavaScript-json数组排序
查看>>
MySQL学习笔记之内连接
查看>>
一个不错的CSS DIV布局,DIV高度自适应
查看>>
常见标签的默认属性值及相互作用——关于CSS reset的思考
查看>>
RelativeLayout(相对布局)
查看>>
浅谈SQL Server 对于内存的管理
查看>>