class ThreadedDelete : public QThread { public: void take(QObject *o) { ThreadedDelete* td = new ThreadedDelete; td->deleteThreaded(o); } protected: ThreadedDelete() : QThread() {}; ~ThreadedDelete() { printf("~ThreadedDelete\n");} deleteThreaded(QObject *o) { obj = o; connect(this, SIGNAL(finished ()), SLOT(deleteLater ())); obj->setParent(0); // unparent the target or the move will fail obj->moveToThread(this); start(); } virtual void run() { printf("~ThreadedDelete run1\n"; delete obj; printf("~ThreadedDelete run2\n"; } protected: QObject obj; };