我的應用程序允許用戶隨時切換語言。我看到大約10%的用戶切換到中文或日文時,用戶界面文本的字形呈現不正確。爲什麼我的QML CJK文本使用損壞的字形進行渲染?
這個應用程序是在Linux下iMX6平臺上運行。正在使用Qt 5.5.0。 QML用於呈現UI。正在使用QML文本控件呈現損壞的文本。
Example of corrupt font rendering
在問題被使用的字體是源漢斯三世普通。我曾嘗試使用QML FontLoader加載它,並將它加載到應用程序字體數據庫的C++端(這兩種方法都表現出這個問題)。我試過使用(承認非常強相關的)Noto字體;同樣的問題。
使用時的Roboto非CJK文字,提到我從來沒見過文本呈現的腐敗,這比不CJK /來源漢斯三世更經常地工作。
腐敗很有趣,因爲它看起來像是在呈現的位圖級別,而不是字形定義級別(請注意一些字形的下半部分是正確的,但上半部分已損壞)。
腐敗有時確實進步。這導致我認爲字形位圖緩存內存被進一步覆蓋(只是一個理論,因爲我不知道Qt是如何進行字體渲染的)。我認爲這可能是QML垃圾收集做一些奇怪的事情,但在C++端加載字體並沒有什麼不同。
我會使用「原生渲染」爲QML文本嘗試下一個控件。
有沒有人見過這個?任何人都可以確認FreeType用於Qt 5.5.0下的字體管理/渲染嗎?是否有方法來影響字體位圖緩存的管理方式?
謝謝!
更新:使用'renderType:Text.NativeRendering'沒有消除這個問題(雖然腐敗表現略有不同)。而且,鑑於剛剛結束了與一般呈現混亂的文本(軟擴展性很差,等等 - as documented)該模式的侷限性。
更新2:我建的Qt用(據我所知)所有的字形緩存禁用 - shouldDrawCachedGlyphs()在我的本地構建返回false該呼叫我能找到的四個實例 - - 但仍然遇到字形腐蝕。
更新3:嘗試通過設置QMLSCENE_DEVICE = softwarecontext切換到使用軟件(非OpenGL)Qt Quick 2渲染器per docs;字形腐敗仍然發生。
提供[mcve]。 – Meefte