В общем случае, как уже посоветовали, создать свой собственный тип, но всё равно не получится с ним работать как с массивом m[4]=42; будет что-то вроде m.set(4,42); и к тому же опять придётся скорее всего писать "обёртки", либо перегружать оператор [] и так далее - в зависимости от Вашей ситуации.
Вы можете работать как с обычным массивом через QList, но при этом будут особенности QList - если в QML сделать m[4]=42; то с 0 по 3 список будет заполнен нулями и, возможно, Вам придётся вносить ещё изменения в код для обхода этой особенности.
Вообще, теоретически, можно унаследоваться от QVariant, перегрузив оператор = , что бы выполнить внутри преобразование QMap к QVariantMap , сложить всё это аккуратно в QVariant и перегрузить (), что бы выполнить обратное преобразование. Будет немного трудновато, но вполне возможно. Либо, возможно, заставить думать мета-систему Qt о QMap как о QVariant map.