The constructor for SubPeriodsSwap uses the fixing calendar of the float index to determine the floating leg payment dates and the accrual dates for the sub periods. But in general it might not be true. An example I know of is the 7-day repo swap in China where the sub periods are simply 7-day intervals, ignoring ANY holiday (accrual can start/end on holiday), whilst in the non-deliverable variant of it the float payment dates depend not only on the Chinese but also the US holidays (as for many non-deliverable instruments).
So I believe it would be good if the SubPeriodsSwap (and SubPeriodsSwapHelper) can have constructor that can cope with that flexibility there. I would imagine a consturctor which include 3 sets of the below variables (for fixed leg, float leg, and also for float leg sub periods for those with asterisks):
Tenor, Calendar*, DayCount, Convention*, DateGenerationRule*
It should only involve very little change to the generation of the float schedule and sub period schedule.
That is along with the other parameters like notional of course. If that is too much to include in a constructor, I would also suggest a MakeSubPeriodsSwap class (like the MakeVanillaSwap from QL) to facilitate.