To make things clear, here is output from my test program (three threads: main, client, sender, neither client nor sender has event loop, client and sender live in main thread, socket lives in client thread):

Qt::AutoConnection (slot is executed in main thread):
Qt Code:
  1. "main, thread: b70a28e0"
  2. server is listening
  3. incoming connection
  4. "client started, thread: b6e82bb0"
  5. "sender started, thread: b6681bb0"
  6. "sender emit signal, thread: b6681bb0"
  7. "client slot, thread: b70a28e0"
  8. QObject: Cannot create children for a parent that is in a different thread.
  9. "sender emit signal, thread: b6681bb0"
  10. "client slot, thread: b70a28e0"
To copy to clipboard, switch view to plain text mode 

Qt::DirectConnection (slot is executed in sender thread):
Qt Code:
  1. "main, thread: b71698e0"
  2. server is listening
  3. incoming connection
  4. "client started, thread: b6f49bb0"
  5. "sender started, thread: b6748bb0"
  6. "sender emit signal, thread: b6748bb0"
  7. "client slot, thread: b6748bb0"
  8. QObject: Cannot create children for a parent that is in a different thread.
  9. "sender emit signal, thread: b6748bb0"
  10. "client slot, thread: b6748bb0"
To copy to clipboard, switch view to plain text mode 

Qt::QueuedConnection (slot is executed in main thread):
Qt Code:
  1. "main, thread: b70df8e0"
  2. server is listening
  3. incoming connection
  4. "client started, thread: b6ebfbb0"
  5. "sender started, thread: b66bebb0"
  6. "sender emit signal, thread: b66bebb0"
  7. "client slot, thread: b70df8e0"
  8. QObject: Cannot create children for a parent that is in a different thread.
  9. "sender emit signal, thread: b66bebb0"
  10. "client slot, thread: b70df8e0"
To copy to clipboard, switch view to plain text mode