Как реализовать перетащите в QlistWidget, который содержит файлы?

StackOverflow https://stackoverflow.com/questions/4295838

  •  28-09-2019
  •  | 
  •  

Вопрос

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

Я попробовал читать документацию на Drag & Drop, но не смог понять, как это сделать. Я установил Pragenabled Property в True и DRAGDROPMODE свойство драгоценно. Теперь я могу начать сопротивление, но если я перетащите элемент списка, чтобы VLC ничего не происходит (что не удивительно).

Это было полезно?

Решение

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

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;
        }
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top