1 Цикл событий, запущенный в том же потоке
2 Все элементы пользовательского интерфейса находятся в том же потоке, в котором выполнялась ваша функция main ().
3 Есть класс QThread, который позволяет вам иметь поток с отдельным циклом событий. Существует абстрактный класс QRunable, позволяющий запускать повторяющиеся длительные задачи в отдельных потоках с помощью QThreadPool.
4 update () и repaint () - это слоты, и лучший способ вызвать их из отдельного потока - это использовать соединение в очереди с сигналом в вашем объекте, который находится в отдельном потоке (см. Документацию QObject :: connect о типах соединений)
Вы можете найти всю необходимую информацию, прочитав документацию по упомянутым мною классам.