Если у Вас signalGET и slotGET подключены через DirectConnection, и в слоте slotGET нет асинхронных операций, то никакие циклы ожидания не нужны. Контекст выполнения после вызова signalGET пойдёт в методе дальше только после завершения работы внутри signalGET.
В ином случае, можно воспользоваться различными подходами. Например, с QEventLoop код может выглядеть так:
int k;
int getNumber(void) {
emit signalGET();
QEventLoop event_loop;
connect(this, SIGNAL(done()), &event_loop, SLOT(quit()));
event_loop.exec();
return k;
}
slotGET
{
k = /*что-то там*/;
emit done;
}