Лучший способ общаться между объектами в Qt - это использовать сигналы и слоты. Это потокобезопасный способ, который обрабатывается циклом обработки событий и не требует блокировки с вашей стороны. Вы также можете использовать события, хотя такое использование кажется немного странным - событие - это уведомление о происходящем, а не инструмент для чата.
Вы также можете использовать потоковые примитивы, такие как QMutex, QSemaphore, QWaitCondition и QReadWriteLock (аналогично QMutex, но, как следует из названия, позволяет блокировать чтение или запись, но не обе одновременно).
Вам следует прочитать документацию по Qt, в частности, я рекомендую начать со страницы поддержки потоков в Qt .