What simar0at said is what you should check out, WDT. If QFile uses the native c runtime file reading functions (instead of the CreateFile()/WriteFile()/ReadFile() Windows API functions) then, passing the file name (device path) of your HID device in the same way that CreateFile() expects, will not work at all.
Just as a coincidence I also have a user level HID program using Qt, but the whole HID part of it was done using the native Windows API functions.

Just to shower some light on the issue here are a couple things you could check:
1 - QSocketNotifier seems like a very nice solution for monitoring read and write operations over file descriptors. The problem is that (and the Qt documentation for the QSocketNotifier class slounds like that) is that, on Windows, it really works only for network socket descriptors (not handles returned by CreateFile()), but on *nix it works for network sockets, and maybe even for serial ports and file descriptors of any kind (maybe even a HID one). It's just my guess, but I will try answering this question soon.

2 - Second option is cumbersome, but it's a way and that's what I did here at work: Subclass QIODevice, then when using the CreateFile and Read/WriteFile functions with Overlapped IO, if you find yourself asking how you are going to mix the WaitForSingleObject (or multiple objects) with the main thread event loop (so you don't have to use a separated thread to avoid freezing the Ui) just look at the : <QtCore/private/qwineventnotifier_p.h>, it solves that problem.