Are you aware of the fact that QFtp operations are asynchronous ? Have you checked the "QFtp::error()" ?
Btw. QFile pointer which you passed to "put" will leak, you should delete it after "put" command is finished. I also think you should open the file for reading before passing it to "put" method.