Om filen inte har ett "slut" så kommer inläsningen att vänta tills ett sådant finns tillgängligt. För att komma runt det kan man om man använt fopen & fcntl alternativt open lägga till flaggan O_NONBLOCK. Då kommer inte kommandot att hänga sig längre. Man får dock ta hänsyn till funktionerna kommer att returnera även när det inte finns data tillgängligt.
Eftersom du försöker använda lirc så kan du utnyttja dess programmeringsgränssnitt istället.:
http://www.lirc.org/html/technical.html under rubriken The lirc_client library.
Tillägg: Tydligen kan man ställa in O_NONBLOCK med Qt om man lägger till flaggan IO_Async.
Din kod hade då fått ändrats till något i stil med följande
if(file.open(QIODevice::ReadOnly | QIODevice::IO_Async))