If part of the process of moving items is reparenting them to an item that is underneath then you will need to store the parent item as well as the position relative to that item. So the whole move operation will consist of changing {par1, pos1} to {par2, pos2}. If moving items does not change their parents then I'm not sure what is the problem you are having as moving the item would not result in changing the parent and again using pos() and setPos() should be enough.
For completeness -- there is QGraphicsItem::scenePos() to reed the position relative to the scene and there is a family of mapTo*() and mapFrom*() (including QGraphicsItem::mapFromScene()) to map coordinates between different systems.
By the way -- if you have a "delete" among the commands you handle in your undo/redo system, be sure that you think twice how to handle that in combination of storing pointers to items in other commands -- if you really delete an item, its pointer will become invalid and all other stored commands dealing with that item will contain dangling pointers.
Bookmarks