我想对我的应用程序中的所有文本使用本机渲染。对于每个Text
,Label
等元素我可以这样做
Text {
renderType: Text.NativeRendering
}
触发原生渲染。我还可以将软件渲染器用于整个应用程序:
QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
但是由于软件渲染器的一些错误和一些性能问题,我想避免这种情况。
是否有全局开关来更改渲染类型?
我想对我的应用程序中的所有文本使用本机渲染。对于每个Text
,Label
等元素我可以这样做
Text {
renderType: Text.NativeRendering
}
触发原生渲染。我还可以将软件渲染器用于整个应用程序:
QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
但是由于软件渲染器的一些错误和一些性能问题,我想避免这种情况。
是否有全局开关来更改渲染类型?
从 Qt 5.7 开始,您可以更改默认的 Qt Quick 文本渲染类型,但遗憾的是只能在构建时更改。为了更改默认值,您必须libQt5Quick.so
使用QT_QUICK_DEFAULT_TEXT_RENDER_TYPE
set to进行重建NativeRendering
。有关更多详细信息,请参阅https://codereview.qt-project.org/#/c/121748/。
如果您使用来自 qt.io 的安装程序安装了 Qt,请使用维护工具安装源程序包(如果尚未安装),导航到qtdeclarative/src/quick
,使用定义运行 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
(或者如果您想节省时间,只需 delete qquicktext*.o
) 。make
编辑:从 Qt 5.10 开始,还可以通过QQuickWindow::setTextRenderType()
. 请注意在加载 QML 内容之前设置它。
环境变量QML_DISABLE_DISTANCEFIELD
对此进行控制。如果你把
qputenv("QML_DISABLE_DISTANCEFIELD", "1");
在你的 main 开始时,你会得到一个漂亮而清晰的文本渲染。
在 c++ 主函数中首先添加这一行: QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);