На всякий случай изложу в вкратце суть внешних источников данных.
Внешние источники бывают двух видов :
1. Источник реализующий QAbstractItemModel. Этот источник подключается через report.dataManager().addModel("имя модели","объект модель","true - объект модель уничтожает LimeReport");
2. Источник построенный на методе обратного вызова.
В коде своего приложения реализуете слот getCallbackData(LimeReport::CallbackInfo,QVariant&)
При желании организовать подчиненные источники или в случае, если заранее не известно количество записей в курсоре, можно дополнительно реализовать слот changePos(const LimeReport::CallbackInfo::ChangePosType&,bool&).
Пример реализации можно посмотреть в demo_r1
Теперь как использовать:
Внешние источники цепляются к бандам так же как и внутренние.
Единственное отличие это подчиненные источники. Есть два варианта их реализации:
1. LimeReport'у передаются 2 полные модели, затем в дизайнере LimeReport создается подчиненный источник фильтрующего типа в, котором указывается главный и подчиненный источник, а так же поля по которым будет производиться фильтрация в подчиненном источнике. Далее в подчиненных бандах используется этот фильтрующий источник данных.
2. Используется механизм источника с обратным вызовом у, которого в слоте changePos производится инициализация подчиненных источников.
Вот как то так