Самое простое - использовать тайлы.
описание одного из форматов.
То есть предварительно надо сгенерировать кучу тайлов для нужных уровней зумов, и потом тупо картинками из отображать на виджете.
Для получения географических координат по номеру тайла и уровню зума есть формулы, так же и формулы для обратного перобразования имеются.
Так же в последнем Qt5 есть модуль Qt Location, не знаю, умеет ли он в офлайн.
сложно заранее знать какой зум будет нужен пользователю, да и хотелось чтобы он сам мог карту выбрать (заранее это тоже не известно)
пока думаю про интеграцию с qgis - пусть qgis рисует карту (у него это получается лучше и гибче), а мне "осталось" както добавить своих данных