delete — это стандартный оператор C++. Его можно безопасно использовать, только если вы абсолютно уверены, что объект в данный момент не используется и не находится в середине обработки события.
deleteLater() — это метод QObject, который помечает объект для удаления. Удаление произойдет, когда управление вернется в цикл событий (event loop). Это безопаснее, потому что к моменту удаления все текущие события для этого объекта будут обработаны.
Если объект "живет" в потоке A, а вы находитесь в потоке B, вы не можете удалить его с помощью delete. Это почти гарантированно приведет к крешу, потому что поток A может в этот момент обрабатывать событие для этого объекта.
deleteLater() поставит задачу на удаление в цикл событий того потока, в котором "живет" объект, что является потокобезопасным.