Xasthul: Нужно в главном окне MainWindow (QMainWindow) создать слот, который открывает второе окно, кнопку в первом окне связать с этим слотом. Ну и закрытие первого окна по такому же принципу. Основная идея это то, что все операции с окнами выполняет MainWindow.
Спасибо за советы. Оказалось проблема в том, что я используюсь QApplication для консольного приложения. Когда меняю на QCoreApplication, то пример кода работает как часы. Видимо macOS проверяет открыты ли окна программы, если нет, то замедляет ее работу, чтобы не жрала ресурсы. Но дело в том, что моя программа не работает без QApplication, т.к. использует графические функции. Решением стало создание пустого окна. Кстати, когда сворачиваю это окно, то программа снова через 30 секунд "замедляется". В общем пока такое решение пойдет, может в будущем разберусь как избавиться от зависимости от QApplication.
charbet: учить C++ для программирования интерфейсов под винду на win api в настоящее время не актуально, для этого изучают C#. Если хочешь C++, то изучай Qt.