Стоп, а зачем вобще QTimer?
Можно же переопределить paintEvent() и в нем вызывать QElapsedTimer::elapsed() и если elapsed = 40 msec, то перерисовывать если нет, то пропускать перерисовку..
Или как-то так..
Кроме того можно замерить реальные
фпс и если они реально чаще чем 25 фпс, то такой метод (с пропусками) может сработать..
Но в общем случае не реально получить точность +/- 1 мсек, т.к. ОС не является реального времени. Это будет работать в некоторых специфических случаях да и то не всегда, ИМХО.
UPD: Хотя, кажется, FPS - это параметр формата видео, с которым должно открываться видео устройство. Хотя я не силен в этой теме.