2010-11-28 52 views
2

我有一个QListWidget,我用文件名填充(没有路径的文件名是项目的文本,完整的路径在项目的工具提示中)。我希望能够将我的QListWidget中的电影文件拖放到VLC中,并且VLC应该开始播放 - 就像我从文件管理器中拖动它一样。如何实现在包含文件的QListWidget中进行拖动?

我试过读Drag & Drop的文档,但想不出如何去做。我将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; 
     } 
}; 
相关问题