2010-11-28 7 views
2

Ich habe ein QListWidget, das ich mit Dateinamen fülle (der Dateiname ohne Pfad ist der Text des Elements und der vollständige Pfad befindet sich in der Tooltip des Elements). Ich möchte zum Beispiel eine Filmdatei von meinem QListWidget auf VLC ziehen können, und VLC sollte damit beginnen, es abzuspielen - genauso, als hätte ich es aus einem Dateimanager gezogen.So implementieren Sie Drag in ein QListWidget, das Dateien enthält?

Ich habe versucht, die Dokumentation zu lesen Drag & Drop, aber konnte nicht herausfinden, wie es geht. Ich habe die dragEnabled-Eigenschaft auf true und die dragDropMode-Eigenschaft auf DragOnly festgelegt. Jetzt kann ich einen Ziehvorgang starten, aber wenn ich einen Listeneintrag auf VLC ziehe, passiert nichts (was nicht überraschend ist).

+0

Ich habe versucht, QListWidget :: mimeData überschreiben und die Dateinamen mit QMimeData :: setUrls festlegen. QListWidget :: mimeData wird aufgerufen, aber das Ziehen funktioniert immer noch nicht. – sashoalm

Antwort

2

Ich wollte genau das gleiche tun, hier ist, was ich mir ausgedacht habe. Es funktioniert unter Windows, aber ich habe nicht auf anderen Plattformen getestet.

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; 
     } 
}; 
Verwandte Themen