Вы блокируете основной цикл обработки событиями сна, в результате чего воспроизведение происходит, когда управление возвращается обратно в цикл обработки событий. Вы никогда не должны блокировать основной цикл событий, иначе ваш пользовательский интерфейс и другие вещи будут зависать во время сна. Если вы действительно хотите подождать где-нибудь в своем коде, лучше использовать локальный цикл обработки событий и ждать там:
QEventLoop loop;
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
timer.start(1500);
loop.exec();
Но вы должны заметить, что это не очень хорошая практика, и вам лучше выполнять асинхронные операции, используя сигналы и слоты.