I'd recommend looking at Marble, an open source (GNU Lesser General Public License (LGPL)) globe visualisation project. I use it for planning my routes in new cities when I'm on the train away from internet access, via the monav offline routing service.
This works fine, because all the places I have visited while online have been cached - I set the hard disk cache size to 1 Gb, allowing the most important data to be downloaded in advance of travel:

Also, you can download tiles for entire regions if you like:

I'm not sure if the code used by Marble is compatible with your program, but imagine the licence would allow you to harness it in your project if it's not for profit. I notice that a version of marble uses Qt for Android, so imagine their approach to caching would be compatible: see "Marble-Qt for the Asus EeePC" here.
Hope this helps and apologies if you've come across Marble's caching capabilities before.