Posts about the capabilities of QTimer come up every few months. Timer resolution is dependent upon the underlying OS capabilities, and in a time-sharing OS, there will be jitter when small timer intervals are used. The timers should only be used for functions that facilitate smooth user interaction, not critical events with short intervals. I hesitate to mention solid interval limits because it is system dependent, but I dont do anything less than 50ms when I do timers.
Within the confines of a time-sharing OS your approach with threads and busy-waits is more appropriate. You can insert a "small" msleep in the loop to destress the cpu, but again, you're competing with other tasks so you are at the mercy of the cpu scheduler. look into realtime scheduler class as that may help, but understand that class requires you to execute as root, and you can starve other tasks by misusing it.