原文:http://bugreports.qt.nokia.com/browse/QTBUG-10653
这个问题直接导致大量s60机器无法运行QT应用。(但是我惊奇的发现我的E71是安装了FontRouter的,而且运行qt正常)
Note: the following observations are still flaky guesses of mine, please feel free to correct me by adding comments.
Symbian does not offer a customization of system fonts. There are 3rd party tools to fill that Gap. one of these tools is the popular, opensource FontRouter. With FontRouter installed, the user can 'replace' system font faces (such as "Series 60 Sans") by any user-provided font file. This way, users can install fonts with extended language support (e.g. Chinese fonts on Western phone models). Also nice for cosmetic reasons: a user can for example 'replace' "Series 60 Sans" with "Comic sans".
Why did I mention 'replace' in quotation marks? Because the font files are not replaced on the file system (!:\resources\fonts), but the system fonts are transparently replaced in-memory to the user fonts at system runtime. The applications that render text believe that for example they use "Series 60 Sans", but all rasterized text will come from the user provided "Comic sans".
FontRouter runs on all thinkabe Symbian/S60 versions up to Symbian^1.
FontRouter is in the first place a COpenFontRasterizer plugin. This plugin does not rasterize fonts by itself, however. It is a proxy rasterizer, and it lets the original system rasterizer do the actual rasterizing.
Now comes the interesting part: For various reasons, FontRouter accesses the CFontStore instance of the running FBServ.exe! It does that by scanning the heap memory for a CFontStore object signature. The autor of FontRouter created his THeapSearch to achieve that. Apparently, that heap searching technique is still documented in the Symbian^3 documentation (any old school Symbian developer here, who can tell me if that is still state-of-the-art?).
The reason why this works is that FontRouter is a rasterizer plugin, and thus in the same process space as FBServ.exe.
It seems to me that FontRouter would simply misfunction on Symbian^3, unrelated to Qt. I installed FontRouter on an N8 and got an N8 in a reboot loop, which was only fixable by a hard reset. Google has a few hits on 'n8 fontrouter bricked'.
Qt will stop working on systems where FontRouter is active. In the ideal case Qt programs just show garbled text. But usually the the phone reboots as soon as Qt tries to show any text. Qt uses the Symbian font API in a much more extensive way than common Symbian applications do. Apparently, the modifications that FontRouter performs in the FBServ.exe and thus the bahavior of Symbians font API are not compatible with what Qt does.
TODO: try to reproduce Qt's usage of the font API (in a non-Qt app) in a way that it reboots the phone.
First, it needs to be found out where exactly the problems are and where it crashes. Then, one of these things can be done: