Как реализовать Drag в QListWidget, который содержит файлы? - PullRequest
2 голосов
/ 28 ноября 2010

У меня есть QListWidget, который я заполняю именами файлов (имя файла без пути - это текст элемента, а полный путь - во всплывающей подсказке элемента). Я хочу иметь возможность, например, перетаскивать файл фильма в VLC из моего QListWidget, и VLC должен начать его воспроизводить - так же, как если бы я перетащил его из файлового менеджера.

Я пытался читать документацию по Drag & Drop, но не мог понять, как это сделать. Я установил для свойства dragEnabled значение true, а для свойства dragDropMode - значение DragOnly. Теперь я могу начать перетаскивание, но если я перетаскиваю элемент списка в VLC, ничего не происходит (что неудивительно).

1 Ответ

2 голосов
/ 13 марта 2012

Я хотел сделать то же самое, вот что я придумал.Он работает на Windows, но я не тестировал на других платформах.

class CustomListWidget : public QListWidget
{
    public :
        CustomListWidget( QWidget * parent = 0 ) : QListWidget( parent ) {}
    protected :
        QStringList mimeTypes() const
        {
            QStringList qstrList;
            qstrList.append("text/uri-list");
            return qstrList;
        }
        QMimeData * mimeData( const QList<QListWidgetItem *> items ) const
        {
            QMimeData *data = new QMimeData();
            QList< QUrl > urls;
            QUrl url;
            url.setPath( items[ 0 ]->toolTip() );
            urls.append( url );
            data->setUrls( urls );
            return data;
        }
};
...