2010-11-28 2 views
2

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

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

+0

Я попытался переопределить QListWidget :: mimeData и установить имена файлов с помощью QMimeData :: setUrls. QListWidget :: mimeData вызывается, но перетаскивание по-прежнему не работает. – sashoalm 2011-01-31 06:44:52

ответ

2

Я хотел сделать то же самое, вот что я придумал. Он работает на 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; 
     } 
}; 
Смежные вопросы