• 4273阅读
  • 2回复

急!!!!搞了好久的!如何实现文件或文件夹的托拽操作? [复制链接]

上一主题 下一主题
离线ch19860304
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-05
想实现的功能是:将一个文件1或文件夹1托拽到(算是剪切到)另一个文件夹2中。我是这么做的:重写了dragEnterEvent函数和dropEvent函数。但在托拽文件夹的过程中,dragEnterEvent函数和dropEvent函数居然都没有被调用。

list->setSelectionMode(QAbstractItemView::ExtendedSelection);
list->setDragEnabled(true);
list->setAcceptDrops(true);
list->setDropIndicatorShown(true);
model->setSupportedDragActions(Qt::CopyAction|Qt::MoveAction) ;
setAcceptDrops(true ) ;

void Imagewindow::dragEnterEvent ( QDragEnterEvent * event )
{
    qDebug("drag event!");    //没有被打印
    event->acceptProposedAction () ;  //允许用户这个对象托拽到这个控件
}

void Imagewindow::dropEvent ( QDropEvent * event )
{
    qDebug("drop event!");        //没有被打印
    const QMimeData *data = event->mimeData();   //获得文件1的信息
    QPoint point = event->pos ();    //获得文件1最终drop的位置
    QModelIndex  index = list->indexAt(point) ;   //也就是文件夹2的位置
    if(model->isDir(index)
     model->dropMimeData(data, Qt::MoveAction, -1,-1, index ) ;  //将文件1放到文件夹2中
}

[ps]我这样行得通吗?
离线ch19860304
只看该作者 1楼 发表于: 2009-07-06
来人呀!帮我看看吧
离线feiying888

只看该作者 2楼 发表于: 2009-07-07
呵呵。同是天涯沦落人啊。让我费了好几天的事,终于基本搞通了。

刚看了一下你的代码,之所以dragEnterEvent函数和dropEvent函数居然都没有被调用,是因为,你一直没有在程序里开始拖拽操作。
一般需要在mousePressEvent事件里,定义一个QDrag,并执行QDrag::exec(),开始拖拽操作。 这样,就可以执行到那两个函数了。
快速回复
限100 字节
 
上一个 下一个