Hi

I'm having dificulty using drag & drop for QTreeView. Actually i'm trying to move an item by drag n drop. I think i've setup everything as documented in qt4 docs. See the code below, may be you could find mistakes.

So far i've noticed following misbehaviour: -
  • When an item is moved, a new copy of the item is created.
  • When i start dragging an item from say first column and drap at say second column, a new copy of the item is created with text of column1 in column2, column 2 in column3, so on....


Set up QTreeView like this: -
Qt Code:
  1. m_pDetailView->setDragEnabled(TRUE);
  2. m_pDetailView->setAcceptDrops(TRUE);
  3. m_pDetailView->setDropIndicatorShown(TRUE);
To copy to clipboard, switch view to plain text mode 

Have following in QAbstractItemMode derived class
Qt Code:
  1. Qt::ItemFlags NowPlayingModel::flags(const QModelIndex& index)const{
  2. if(!index.isValid())
  3. return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
  4. Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
  5. if(mColumns.at(index.column()).isEditable)
  6. flags |= Qt::ItemIsEditable;
  7. return flags;
  8. }
  9.  
  10. Qt::DropActions NowPlayingModel::supportedDropActions() const{
  11. return Qt::CopyAction | Qt::MoveAction;
  12. }
  13. //This function is never called
  14. bool NowPlayingModel::removeRows(int row, int count, const QModelIndex &parent){
  15. qDebug("Remove");
  16. if(parent.isValid())
  17. return FALSE;
  18. beginRemoveRows(parent, row, row + count - 1);
  19. for(int i = 0; i < count; ++i){
  20. delete m_pAllData->takeAt(row);
  21. }
  22. endRemoveRows();
  23. return TRUE;
  24. }
To copy to clipboard, switch view to plain text mode 

Please guide me through the correct way. I've tried everything i could.

Thanks in advance.