• 5264阅读
  • 3回复

请问一个view/model的问题 [复制链接]

上一主题 下一主题
离线wangbenqq
 

只看楼主 倒序阅读 楼主  发表于: 2008-04-09
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我用QT文档中的Using Drag and Drop with Item Views,设计了两个view/model。一个是继承的QDirModel,view用的是QTreeView。另一个是继承的QAbstractTableModel,用的是QTableView。

我想实现从treeview 中拖放文件的信息到tableview中。即在tableview中,显示出来我拖放过来的文件的信息,比如文件名,路径等等,而且还要可以对这个文件进行操作。

我的DirModel里面的对于DROP的实现是  QStringList DirModel::mimeTypes() const
{
    QStringList types;
    types << "application/vnd.text.list";
    return types;
}

QMimeData *DirModel::mimeData(const QModelIndexList &indexes) const
{
    QMimeData *mimeData = new QMimeData();
    QByteArray encodedData;

    QDataStream stream(&encodedData, QIODevice::WriteOnly);

    foreach (QModelIndex index, indexes) {
        if (index.isValid()) {
            QString text = data(index, Qt::DisplayRole).toString();
            stream << text;
        }
    }

    mimeData->setData("application/vnd.text.list", encodedData);
    return mimeData;
}

这是从文档中抄过来的。

但是拖放过去的信息都是文本,并不是真正的对文件的信息。

怎么来加入QFile和别的呢?怎么能使得拖放过去的信息就是真正的文件信息呢?

请教高手指点??

而且mimeData->setData("application/vnd.text.list", encodedData);只能将MIME指向数组,不能指向别的类型啊!怎么改呢?

看了好久了,实在是不知道怎么弄!

请教!
离线wangbenqq

只看该作者 1楼 发表于: 2008-04-10
没人知道么?
请教啊!!!!
离线liuchuanwen
只看该作者 2楼 发表于: 2008-04-11
你的思路需要调整, 你需要的Drag 传递过来是信息.那么你需要关注的QMimeData ,

在你拷贝的代码中,你的参数是text,不是你要QFile信息.
 
    QString FilePath;
    FilePath  = 你选中的文件路径
    QByteArray itemData;
    QDataStream dataStream(&itemData, QIODevice::WriteOnly);
    dataStream << FilePath  ;

    QMimeData *mimeData = new QMimeData;
    mimeData->setData("application/x-dnditemdata", itemData);
离线wangbenqq

只看该作者 3楼 发表于: 2008-04-14
谢谢!感谢高手
快速回复
限100 字节
 
上一个 下一个