模糊的 Qt 快速文本

Blurred Qt Quick Text

这是 Qt Creator 中的 Qt Quick 示例中的一个示例,当我 运行 项目时所有文本都失去了质量和模糊,所附图片清楚地描述了问题。

Qt 版本:5.4.1

平台:Windows7

这会使用本机渲染来渲染字体。但无法解决默认 Qt 渲染的问题。

import QtQuick 2.4
import QtQuick.Window 2.0

Window {
    visible: true
    width: 512
    height: 300

    Text {
        anchors.centerIn: parent
        text: "Hello World!"
        renderType: Text.NativeRendering
    }
}

这是一个旧错误,当 Qt 使用系统 OpenGL 功能时,可能会在某些硬件上重现 "[QTBUG-31983] Font rendering on Windows XP shows artifacts with QML Text element"

在 Qt 5.5 版之前,Windows 有两种类型的 Qt 版本:ANGLE 和 OpenGL。它们可以通过安装程序文件名中的后缀"opengl"来区分,例如:

qt-opensource-windows-x86-msvc2013_opengl-5.4.1.exe
qt-opensource-windows-x86-msvc2013-5.4.1.exe

参见 "Qt 5 on Windows ANGLE and OpenGL" 的解释。

ANGLE版本没有这样的缺陷。只有 OpenGL 构建受到影响。许多 Windows 安装默认不支持 OpenGL。在某些情况下,它可能会在 QML window 初始化期间崩溃。需要手动安装视频驱动程序。然而,对于一些老硬件来说,找到对OpenGL有足够支持的好显卡驱动是个问题。

可能的解决方案:

  • 使用 ANGLE Qt 构建
  • 可以使用默认呈现类型 Text.NativeRendering:
  • 对标准 QML Text 控件进行子类化
Text { renderType: Text.NativeRendering; }

如果不支持 Windows XP,ANGLE Qt build 可能是一个很好的解决方案。

如果不需要大量使用图形,更好的解决方案是使用软件 OpenGL 渲染。在 Qt 5.4 之前,可以使用 MSYS Mesa 库 opengl32.dll(只应使用某些特定版本)。如果此类库放置在使用 OpenGL Qt 版本构建的 Qt 应用程序的可执行文件夹中,则该库将自动用于软件渲染,而不是默认的硬件渲染。从 Qt 5.4 开始,Qt 提供了这样的库:opengl32sw.dll (http://doc.qt.io/qt-5/windows-requirements.html).

软件 OpenGL 仿真在所有类型的硬件上都能完美运行,不需要任何特殊的视频卡驱动程序。

从 Qt 5.4 开始有应用程序属性 Qt::AA_UseSoftwareOpenGL:

Forces the usage of a software based OpenGL implementation on platforms that use dynamic loading of the OpenGL implementation. This will typically be a patched build of Mesa llvmpipe, providing OpenGL 2.1. The value may have no effect if no such OpenGL implementation is available. The default name of this library is opengl32sw.dll and can be overridden by setting the environment variable QT_OPENGL_DLL. See the platform-specific pages, for instance Qt for Windows, for more information. This value has been added in Qt 5.4.

这也发生在我的 QT 5.4.2 MinGW 项目中。使用 Text.NativeRendering 解决了我的模糊文本问题。