6

我想对我的应用程序中的所有文本使用本机渲染。对于每个Text,Label等元素我可以这样做

Text {
    renderType: Text.NativeRendering
}

触发原生渲染。我还可以将软件渲染器用于整个应用程序:

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);

但是由于软件渲染器的一些错误和一些性能问题,我想避免这种情况。

是否有全局开关来更改渲染类型?

4

3 回答 3

5

从 Qt 5.7 开始,您可以更改默认的 Qt Quick 文本渲染类型,但遗憾的是只能在构建时更改。为了更改默认值,您必须libQt5Quick.so使用QT_QUICK_DEFAULT_TEXT_RENDER_TYPEset 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 内容之前设置它。

于 2017-04-12T15:37:32.430 回答
5

环境变量QML_DISABLE_DISTANCEFIELD对此进行控制。如果你把

qputenv("QML_DISABLE_DISTANCEFIELD", "1");

在你的 main 开始时,你会得到一个漂亮而清晰的文本渲染。

资料来源:http ://www.kdab.com/~thomas/stuff/distancefield.html

于 2017-11-15T19:44:27.043 回答
2

在 c++ 主函数中首先添加这一行: QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);

于 2020-07-11T12:38:35.460 回答