dragdroplistview.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "dragdroplistview.h"
  2. DragDropListView::DragDropListView(QWidget *parent) :
  3. QListView(parent)
  4. {
  5. setAcceptDrops(true);
  6. setViewMode(QListView::IconMode);
  7. //setDropIndicatorShown(true);
  8. //setDragDropMode(QAbstractItemView::DropOnly);
  9. //setDragEnabled(true);
  10. //this->viewport()->setAcceptDrops(true);
  11. //this->viewport()->installEventFilter(this);
  12. }
  13. void DragDropListView::dragEnterEvent(QDragEnterEvent *event)
  14. {
  15. if(event->mimeData()->hasFormat("text/uri-list"))
  16. {
  17. if(!getDropFiles(event->mimeData()->urls()).isEmpty())
  18. event->acceptProposedAction();
  19. }
  20. }
  21. void DragDropListView::dragMoveEvent(QDragMoveEvent *event)
  22. {
  23. if(event->mimeData()->hasFormat("text/uri-list"))
  24. {
  25. if(!getDropFiles(event->mimeData()->urls()).isEmpty())
  26. event->acceptProposedAction();
  27. }
  28. }
  29. void DragDropListView::dropEvent(QDropEvent *event)
  30. {
  31. QStringList files = getDropFiles(event->mimeData()->urls());
  32. if(!files.isEmpty())
  33. {
  34. emit filesDragDropped(files);
  35. }
  36. }
  37. void DragDropListView::resizeEvent(QResizeEvent *)
  38. {
  39. setFlow(QListView::TopToBottom);
  40. }
  41. QStringList DragDropListView::getDropFiles(QList<QUrl> urls)
  42. {
  43. QStringList files;
  44. for(int i=0;i<urls.size();i++)
  45. {
  46. if(urls.at(i).isLocalFile())
  47. {
  48. QFileInfo fileInfo(urls.at(i).toLocalFile());
  49. if(fileInfo.suffix()=="txt" && fileInfo.isFile()){
  50. files<<urls.at(i).toLocalFile();
  51. }
  52. }
  53. }
  54. return files;
  55. }