1. You ARE blocking GUI thread beacuse second thread is created in slot on_btnRun_clicked() and You are waiting in this slot for finishing this thread.
2. In worker thread You are NOT starting event loop. So signals from worker thread are NOT provided to main thread.