Qt解析表格拖拽中默认的QMimeData的数据

在QTableWidget或者QTreeWidget实现拖拽功能时,有时需要自定义或者某些特定的逻辑条件才能接受拖拽的数据,这时候可能就要解析拖拽中的QMimeData的数据。默认拖拽的QMimeData的类型formats是application/x-qabstractitemmodeldatalist。可以通过QMimeData::data ( const QString & mimeType ) 方法获取对应类型的数据。对应的数据解析如下


void MTableWidget::dragMoveEvent( QDragMoveEvent *event )
{
	qDebug() << "formats: "<< event->mimeData()->formats().join(",");
	QByteArray itemData= event->mimeData()->data("application/x-qabstractitemmodeldatalist");

	QDataStream stream(&itemData, QIODevice::ReadOnly);

	int  row,col;
	QMap<int,  QVariant> roleDataMap;
	while (!stream.atEnd())
	{
		stream >> row >> col >> roleDataMap;
		qDebug() << "row: " << row << " col :" << col << " data:"<< roleDataMap ;
	}
    
    //
        //dosomething();
    //

}

解析出来的QMap<int,  QVariant> roleDataMap的数据对应的是item利用setData设置。Qt::ItemDataRole 和 自定义的值
加载数据是设置如下
item->setData(Qt::UserRole,i);
item->setData(Qt::UserRole+1,j);


打印如下

 

注意:对应QTreeWidget如果拖拽的row代表的含义是在其父item的第几行


对于QTableView、QTreeView、QTreeWidget也是如此
参考:http://www.voidcn.com/article/p-hnfiowoo-btw.html

如果是自己定义的formats类型可以参考
https://doc.qt.io/qt-5/qtwidgets-draganddrop-draggableicons-example.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值