2017-04-12 67 views
4

我想爲我的應用程序中的所有文本使用本機渲染。對於每個TextLabel等元素,我可以做到這一點我可以全局切換到Qt Quick Controls 2中的原生文本渲染嗎?

Text { 
    renderType: Text.NativeRendering 
} 

觸發本地渲染。我還可以使用軟件渲染爲整個應用程序:

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); 

然而,由於一些錯誤的軟件渲染器和一些性能問題,我想避免這種情況。

是否有全局開關來改變渲染類型?

回答

2

由於Qt 5.7,您可以更改默認的Qt Quick文本渲染類型,但不幸的是只在編譯時。爲了更改默認值,您必須重建libQt5Quick.so並將QT_QUICK_DEFAULT_TEXT_RENDER_TYPE設置爲NativeRendering。有關更多詳細信息,請參閱https://codereview.qt-project.org/#/c/121748/

如果您已經使用qt.io中的安裝程序安裝了Qt,請使用維護工具安裝源代碼包(如果您尚未這樣做),導航至qtdeclarative/src/quick,使用define運行qmake並構建。沿着線的東西:

cd path/to/Qt/Sources/5.8/qtdeclarative/src/quick 
# NOTE: make sure to run qmake from the same/correct Qt installation 
path/to/Qt/5.8/<spec>/qmake "DEFINES+=QT_QUICK_DEFAULT_TEXT_RENDER_TYPE=NativeRendering" 
make -jN 

如果你有自建Qt的安裝,調用make clean(或者,如果你想節省時間,只需要刪除qquicktext*.omake之前重建庫。

編輯:由於Qt 5.10,也可以通過QQuickWindow::setTextRenderType()在C++中指定默認文本渲染類型。只需注意在加載QML內容之前進行設置。

+0

我說得對不對的假設,我還需要在各種依賴Qt擁有帶(安裝各種-dev包)。 –

2

環境變量QML_DISABLE_DISTANCEFIELD控制着這個。 如果你把

qputenv("QML_DISABLE_DISTANCEFIELD", "1"); 

你的主要的開始,你會得到一個很好的和清晰的文字渲染無處不在。

來源:http://www.kdab.com/~thomas/stuff/distancefield.html