Возможно, я неправильно понимаю, но я думаю, что вы хотите предоставить достаточно информации в QMimeData для создаваемого вами QDrag, чтобы вы могли находить файлы в архиве после того, как пользователь удалит их без необходимости сначала извлекать их. Таким образом, если ваш код в исходном коде не знает, из какого архива поступили файлы, вам также необходимо указать путь к архиву в ваших данных MIME.
Перетаскивание начинается как сообщение:
«Я перетаскиваю Archive1: FileA, Archive1: FileB», но не извлекаю файл.
Он заканчивается на другом конце, интерпретируя сообщение и затем извлекая файлы. Я бы, наверное, установил какой-то простой ICD для обеих сторон передачи сообщения. Если вы можете перетаскивать только один архив за раз, возможно, список строк, в котором первый элемент является архивом, а следующие - файлы:
QStringList list;
list << archivePath;
list << fileName1;
list << fileName2;
QByteArray ba;
QDataStream stream(&ba);
stream << list;
QMimeData* mime = new QMimeData;
mime->setData("yourType", ba);
Надеюсь, это поможет!