将保存文件路径的 QStandardItem 拖放到 C++ 中的另一个应用程序?

Drag and drop QStandardItem holding file paths to another application in C++?

我有一个正在为文件树建模的树视图。 TreeView 中的每个项目都是一个包含文件路径的 QstandardItem。我希望能够获取它引用的文件并将该项目拖到另一个应用程序中。这些文件都是视频文件,所以我想添加拖放到 VLC、Adobe Premier 等的功能

简约代码: main.cpp

将 d:/1.txt 拖放到记事本

#include <QtWidgets/QApplication>
#include <QMimeData>
#include <QTreeView>
#include <QDrag>
#include <QStandardItemModel>
#include<QUrl>
class Myodel :public QStandardItemModel
{
    Q_OBJECT
public:
    QStringList mimeTypes() const override
    {
        return QStringList(QLatin1String("text/uri-list"));
    }
    QMimeData* mimeData(const QModelIndexList& indexes) const override
    {
        QList<QUrl> urls;
        QList<QModelIndex>::const_iterator it = indexes.begin();
        for (; it != indexes.end(); ++it)
            if ((*it).column() == 0)
                urls << QUrl::fromLocalFile("d:/1.txt");
        QMimeData* data = new QMimeData();
        data->setUrls(urls);
        return data;
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Myodel* model = new Myodel;
    QStandardItem* parentItem = model->invisibleRootItem();
    for (int i = 0; i < 4; ++i) {
        QStandardItem* item = new QStandardItem(QString("item %0").arg(i));
        parentItem->appendRow(item);
        parentItem = item;
    }
    QTreeView* tree = new QTreeView();
    tree->setModel(model);
    tree->setDragEnabled(true);
    tree->show();
    return a.exec();
}
#include"main.moc"