Run the following application (reproduced on Mac OS X):
Two of the Hiragana characters will be boxes while the third will be rendered correctly.
Remove the setCharFormat() call to see it work correctly.
The more ligatures you add to the beginning of the string, the more of the appended Hiragana characters will show as boxes.
What happens is that the glyph array contains the glyph indexes for the "f" and the "i", but the glyph data offset of the first Hiragana symbol points to the third glyph in the array, since both "fi" ligatures have been substituted by a single glyph each. This in turn means that Qt detects that the Hiragana character already has a glyph and thus does not search for the correct font engine to render it.
I haven't been able to reproduce this on Linux though, so there has to be something different there.