The standard QSound and the Phonon library both have significant problems when it comes to playing sound. They both require the main message loop which means either a slight block in the main thread or a delay in playing the sound. Ultimately they both use a background thread, but the lag is easy to notice. Not to mention that Phonon has questionable support on many platforms.
I've worked with both for a while and tried to a build a simple sound system for playing user interface sounds (just to beep and pop occasionally). It just isn't possible using the standard Qt Library.
I'd recommend using OpenAL, which I eventually did. It's a relatively straight-forward library and seems to have good cross-platform support. The other option is SDL_mixer, but OpenAL seemed easier to get installed on Windows (probably not by much though). So basically if QSound::play
doesn't do what you want then the standard Qt API won't work for you.
Another important note, don't bother trying to fix the Qt sound api using a separate thread. It won't work. Phonon at least requires to be instantiated and called in the main thread.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…