No, connect() can be called anywhere. The point is not to call any of the methods of objects belonging to thread B from thread A. Regardless of whether there are slots involved anywhere.
So this is forbidden:
ClientSocket* c=new ClientSocket();
c->start();
Sleep(10000); // doesn't make sense
bool bConnected = c->connectToHost("localhost", 1000); // forbidden
ClientSocket* c=new ClientSocket();
c->start();
Sleep(10000); // doesn't make sense
bool bConnected = c->connectToHost("localhost", 1000); // forbidden
To copy to clipboard, switch view to plain text mode
and if you change those calls to proper ones (using signals and slots), you'll notice there is no advantage of having a thread anywhere, it only causes trouble. Qt works in asynchronous fashion, when you try to force it to be synchronous (like in your code above), you'll have more problems with it than benefits from not having to switch your thinking into asynchronous mode.
Bookmarks