我可以在 Qt Quick Controls 2 中全局切换到本机文本呈现吗?

Can I globally switch to native text rendering in Qt Quick Controls 2?

我想对应用程序中的所有文本使用本机呈现。对于每个 TextLabel 等元素,我都可以这样做

Text {
    renderType: Text.NativeRendering
}

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

QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);

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

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

从 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、运行 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重建库之前调用make clean(或者如果你想节省时间,只需删除qquicktext*.o)。

编辑:从 Qt 5.10 开始,也可以通过 QQuickWindow::setTextRenderType() 在 C++ 中指定默认文本渲染类型。只是注意在加载QML内容之前设置它。

环境变量QML_DISABLE_DISTANCEFIELD控制这个。 如果你把

qputenv("QML_DISABLE_DISTANCEFIELD", "1");

在您的主要部分的开头,您将在各处获得漂亮而清晰的文本渲染。

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

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