What may help you a bit is to look at my source code here : http://code.google.com/p/knewz/source/browse/trunk
I ran into this the other day, it's a bit of work to get right but not terribly complicated once you get the hang of it. There's a few things to remember while dragging and dropping stuff, but you should be able to pick them up from my code if you haven't already.
There pertinant stuff you will want to look at is the model and the mimedata implementations:
http://code.google.com/p/knewz/sourc...knewzmodel.cpp
http://code.google.com/p/knewz/sourc...zbmimedata.cpp

Like you, I am just passing pointers to objects around in a QList. So with a drag and drop you just dump the pointer list into a custom mimedata class and retrieve it when it is dropped. Then you can use your underlying data structure to manipulate the data directly, encapsulating any removal and insertion of rows with the correct calls to being/endRemoveRows and begin/endInsertRows