Как правило, вы должны разрешить только одному потоку иметь дело с каждым QObject. В этом случае вы, вероятно, захотите, чтобы ваш QThread держал и использовал QUDPSocket, а основной поток никогда его не трогал (в идеале основной поток даже не должен содержать указатель на QUDPSocket, просто чтобы быть уверенным, что вы никогда забыть и случайно вызвать метод из неправильного потока).
Когда ваш QThread читает некоторые данные UDP, он может выполнить любую начальную обработку с ним, а затем передать данные в основной поток через QApplication :: postEvent () или через соединение сигнал / слот в очереди.
Аналогично, если ваш основной поток имеет некоторые данные, которые он хотел бы отправить в виде UDP-пакета, он не должен напрямую вызывать write () для объекта QUDPSocket; вместо этого он должен уведомить QThread (через postEvent () или сигнал в очереди) и позволить QThread обработать его.