私のアプリケーションでは、ユーザーは即座に言語を切り替えることができます。ユーザーが中国語または日本語に切り替える時間の約10%が表示されていますが、UIテキストのグリフが不適切にレンダリングされています。QML CJKテキストが壊れたグリフでレンダリングされるのはなぜですか?
このアプリケーションは、iMX6プラットフォーム上のLinuxで動作しています。 Qt 5.5.0が使用されています。 UIをレンダリングするためにQMLが使用されます。破損したテキストは、QML Textコントロールを使用してレンダリングされます。
Example of corrupt font rendering
質問で使用されているフォント
は、通常のソースハンス・サンセリフです。私はこれをQML FontLoaderを使ってロードし、アプリケーションフォントデータベースにC++側でロードしてみました(両方のメソッドが問題を呈していました)。私はNotoフォントを使ってみました。同じ問題。CJK以外のテキストにRobotoを使用するとテキストレンダリングが破損することはありませんでした。前述のように、CJK/Source Hans Sansの方が頻繁に動作します。
グリフの定義レベルではなく、レンダリングされたビットマップレベルにあるように見えるので、破損は面白いです(グリフの下半分は正しいが、上半分は壊れていることに注意してください)。
腐敗が進行することがあります。これにより、グリフビットマップキャッシュメモリがさらに上書きされていると思うようになります(Qtがフォントレンダリングを行う方法がわからないので理論だけです)。私はそれが奇妙な何かをしているQMLのガベージコレクションかもしれないと思ったが、C + +側でフォントを読み込むことは違いをもたらさなかった。
次に、QML Textコントロールに「ネイティブレンダリング」を使用してみます。
誰もこれまで見たことがありますか? FreeTypeがQt 5.5.0でのフォント管理/レンダリングに使用されていることを誰でも確認できますか?フォントビットマップキャッシュの管理方法に影響する方法はありますか?
ありがとうございます!
更新: 'renderType:Text.NativeRendering'を使用しても問題は解決されませんでした(ただし、破損はわずかに異なります)。そして、そのモードの限界を考えれば、一般的にレンダリングされていないテキスト(ソフト、スケーリング不足など - as documented)で終わっただけです。
アップデート2:私は(私の知る限り)を無効グリフキャッシュのすべてのQtを構築しました - shouldDrawCachedGlyphsを()私は見つけることができた、その呼び出しの4つのインスタンスのために私の地元のビルドにはfalseを返します - - でもグリフの破損が発生しました。
更新3:softwarecontext QMLSCENE_DEVICE = per docsを設定することにより、ソフトウェア(非OpenGLの)Qtのクイック2レンダラーを使用するように切り替える試みました。グリフの破損がまだ発生しました。
[mcve]を入力してください。 – Meefte