I had a very similar case, although I was working on linux embedded with QT 4.8. Not sure if this can help you, but since I can't put it in a comment, I have to make a separate answer.
Do you set a parent to your QProcess? In my case, I instantiated QProcess like this
QProcess *p = new QProcess;
and I could see in the running processes list that each time I instantiated a new QProcess, I got a new process that couldn't be closed by close(), terminate() or kill(). When I finally rewrote the code like this
QProcess *p = new QProcess(mainW); //mainW was my GUI class, which handled also the closing of the process
the problem solved itself, I didn't even need to call any function to close the process. In my case I was sure the processes I called were finishing, since almost all of them were audio files, so I could hear them finishing. The others were processes that my program waited to complete, so again I was sure they ended because my program wasn't stuck waiting for them,
Hope this can help, despite the different OS.