Janet Wu
Janet Wu

Reputation: 5

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

I have a treeview which is modeling a file tree. Each item in the TreeView is a QstandardItem that holds a file path. I would like to be able to get the file it referres to and drag the item into another application. The files are all video files so I would like to add the ability to drag and drop into VLC, Adobe Premier etc.

Upvotes: 0

Views: 207

Answers (1)

kenash0625
kenash0625

Reputation: 697

minialistic code : main.cpp

drag d:/1.txt drop to notepad

#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"

Upvotes: 1

Related Questions