找回密码
 立即注册
收起左侧

QTreeWidget拖拽到指定区域内,获得相应的对象

6
回复
13741
查看
[复制链接]
累计签到:31 天
连续签到:1 天
来源: 2013-11-19 17:42:37 显示全部楼层 |阅读模式
1Qter豆
任选QTreeWidget里的一节点,将其拖动到一指定的Widget区域内。如何在Widget区域内获取拖动而来的节点的内容? file:///C:\Users\2\AppData\Roaming\feiq\RichOle\2734482341.bmp
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

他们返回的内容不同啊,QObject * QDropEvent::source()返回的是一个QObject对象,而其描述如下: If the source of the drag operation is a widget in this application, this function returns that source; otherwise it returns 0. 就是说如果拖动操作的对象是一个部件,那么会返回该部件,不然返回值为0; 而QByteArray QMimeData::data(const QString & mimeType) 会返回指定类型的数据。 所以一般用后者。 ...
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-11-19 17:42:38 显示全部楼层
wanjie 发表于 2013-11-27 10:02
在接收区域里,可重写dropEvent方法,获得拖放进来的内容:
void dropEvent(QDropEvent *e)
{

他们返回的内容不同啊,QObject * QDropEvent::source()返回的是一个QObject对象,而其描述如下:
If the source of the drag operation is a widget in this application, this function returns that source; otherwise it returns 0.

就是说如果拖动操作的对象是一个部件,那么会返回该部件,不然返回值为0;

而QByteArray QMimeData::data(const QString & mimeType) 会返回指定类型的数据。

所以一般用后者。

回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-11-25 11:33:55 显示全部楼层
使用QTreeWidget的拖动的时候,是可以获取其中的内容的,然后放到指定部件,但是需要重写这个部件的拖放事件,让其可以接受相关内容。
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2013-11-27 09:55:18 显示全部楼层
yafeilinux 发表于 2013-11-25 11:33
使用QTreeWidget的拖动的时候,是可以获取其中的内容的,然后放到指定部件,但是需要重写这个部件的拖放事 ...

是不是说,只有重写一下QTreeWidget里面的拖放事件,才让其能传递我指定的拖放内容啊?
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2013-11-27 10:02:45 显示全部楼层
在接收区域里,可重写dropEvent方法,获得拖放进来的内容:
void dropEvent(QDropEvent *e)
{
    if(e->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")){
        QByteArray itemData = e->mimeData()->data("application/x-qabstractitemmodeldatalist");
        QTreeWidget *source = qobject_cast<QTreeWidget *>(e->source());
        ......
    }
}
e->mimeData()->data("application/x-qabstractitemmodeldatalist")与e->source(),这两者似乎都可以获得拖放进来的内容,可它们之间的具体关系是个什么样的啊?谁能解一下惑呀。不甚感激呀。
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2013-12-2 09:52:31 显示全部楼层
yafeilinux 发表于 2013-11-27 16:42
他们返回的内容不同啊,QObject * QDropEvent::source()返回的是一个QObject对象,而其描述如下:
If the ...

我按照你说的方法来进行尝试,从ByteArray QMimeData::data(const QString & mimeType) 中获取返回指定类型的数据:QByteArray itemData = e->mimeData()->data("application/x-qabstractitemmodeldatalist");
不好意思啊,能不能教我一下,如何从这个QByteArray里获得我之前选中后,传递过来的currentItem啊?我用QDataStream dataStream(&itemData, QIODevice::ReadOnly);从里面拿数据,尝试过很多次了,不过拿出来的不是空内容,就是会卡死。
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-2 16:45:55 显示全部楼层
wanjie 发表于 2013-12-2 09:52
我按照你说的方法来进行尝试,从ByteArray QMimeData::data(const QString & mimeType) 中获取返回指定类 ...

看下官方的puzzle和draggable  Text两个例子吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了