2010-11-28 3 views
2

파일 이름으로 채울 QListWidget이 있습니다 (경로가없는 파일 이름은 항목의 텍스트이고 전체 경로는 항목의 툴팁에 있음). 예를 들어, 내 QListWidget에서 VLC로 동영상 파일을 드래그 할 수 있기를 원하며, VLC에서 재생을 시작해야합니다. 파일 관리자에서 드래그 한 것과 같습니다.파일을 포함하는 QListWidget에서 드래그를 구현하는 방법은 무엇입니까?

드래그 & 드롭에 대한 설명서를 읽으려고했지만 시도하는 방법을 알 수 없습니다. dragEnabled 속성을 true로 설정하고 dragDropMode 속성을 DragOnly로 설정했습니다. 이제 끌기를 시작할 수는 있지만 목록 항목을 VLC로 드래그해도 아무 일도 일어나지 않습니다 (놀라운 일이 아닙니다).

+0

QListWidget :: mimeData를 무시하고 QMimeData :: setUrls를 사용하여 파일 이름을 설정해 보았습니다. QListWidget :: mimeData가 호출되지만 끌기가 여전히 작동하지 않습니다. – sashoalm

답변

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