• 3765阅读
  • 4回复

急!!!!!来人看看吧:实现托拽操作中出现了问题(见三楼) [复制链接]

上一主题 下一主题
离线ch19860304
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-24
想实现的功能是:将一个文件1或文件夹1托拽到(算是剪切到)另一个文件夹2中。我是这么做的:重写了dropEvent函数。做了一个paste_it()函数来实现复制文件1或文件夹1到文件夹2的功能,rmfile()函数来删除文件1或文件夹1的功能。文件1或文件夹1的QModelIndex值用list->currentIndex()获得。
    而现在的问题是,文件夹2的QModelIndex值如何获取呢?

//类Imagewindow是QMainWindow的子类。
model = new QDirModel ;
list = new QListView(this) ;
list->setModel(model);


void Imagewindow::dropEvent ( QDropEvent * event )
{
    /*文件1或文件夹1的QModelIndex值*/
    QModelIndex index1 = list->currentIndex();

    /*????????文件夹2的QModelIndex值如何获取?????????*/
    QModelIndex index2 =

    /*复制文件1或文件夹1到文件夹2*/
    paste_it(index1,index2);

    /*删除文件1或文件夹1*/
    rmfile(index1);

    model->refresh();
}

[ps]我这样实现还行得通吗?
[ 此帖被ch19860304在2009-06-28 23:25重新编辑 ]
离线ch19860304
只看该作者 1楼 发表于: 2009-06-25
拜托了,大家帮忙看看,不胜感激!
[ 此帖被ch19860304在2009-06-25 21:59重新编辑 ]
离线shiroki

只看该作者 2楼 发表于: 2009-06-26
关于model/view的拖拽有文档, 看过了?
http://doc.qtsoftware.com/4.5/model-view-dnd.html
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线ch19860304
只看该作者 3楼 发表于: 2009-06-27
看了文档,把代码改成下面这样,结果还是不行,我拖动文件1到文件夹2下,连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中
}
离线ch19860304
只看该作者 4楼 发表于: 2009-06-28
来人呀,帮忙看看吧,先谢谢了。
快速回复
限100 字节
 
上一个 下一个