QEventLoop loop;
connect(this, &SomeObject::someSignal, &loop, &QEventLoop::quit);
// here you can send your own message to signal the start of wait,
// start a thread, for example.
loop.exec(); //exec will delay execution until the signal has arrived