2010-11-28 41 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; 
     } 
}; 
相關問題