The following solution is feasible only if you have a limited, manageable number of large polygons. First save each polygon as a separate, single-feature shapefile. Then for each one, do the following.
Use the MMQGIS plugin to export the feature set as .csv nodes, then open the 'temp_nodes.csv' in a spreadsheet. Sort the data by the 'shapeid' column. Delete all rows whose 'shapeid' value does not contain the text string 'ring' (these should be sorted together). Save your csv file (maybe 'save as ...').
Then you use MMQGIS again, this time importing your .csv node file as polygons. This will be a layer that contains only the rings from the original polygon. Then make a very small distance buffer, maybe 0.05m, small enough distance to be sure none of the buffer polygons extend beyond the exterior boundary of your large polygon. Select and copy all the buffer features, and paste them into the layer with the single large feature. This is now no longer single-feature, because it has the original polygon plus separate polygons for each ring. So then, select all features in the set, and merge them. Remove the csv and buffer layers and delete all the source files, which are now redundant.
Repeat the steps for each of your single-feature layers. Once finished with all these feature sets, then you can copy and paste or otherwise rejoin them into a single feature set with all the rings filled.