【问题标题】:Blurred Qt Quick Text模糊的 Qt 快速文本
【发布时间】:2015-04-19 18:02:34
【问题描述】:

这是来自 Qt Creator 中的 Qt Quick 示例的示例,当我运行该项目时,所有文本都失去了质量并变得模糊,附图清楚地描述了问题。

Qt 版本:5.4.1

平台:Windows 7

【问题讨论】:

  • 我该如何解决?
  • 尝试将文本renderType设置为Text.NativeRendering doc.qt.io/qt-5/qml-qtquick-text.html#renderType-prop
  • 对我来说看起来像一个图形驱动程序错误。按钮自动在本机呈现这不是问题。
  • 找到任何解决方案了吗?同样的问题
  • 控件没有模糊,只有文字。

标签: windows qt opengl qml qtquick2


【解决方案1】:

这是一个老bug,当Qt使用系统OpenGL能力"[QTBUG-31983] Font rendering on Windows XP shows artifacts with QML Text element"987654321@

在 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 窗口初始化期间崩溃。需要手动安装视频驱动程序。但是,对于一些老硬件来说,要找到这么好的显卡驱动来支持OpenGL是一个问题。

可能的解决方案:

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

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

如果不需要大量使用图形,更好的解决方案是使用软件 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:

强制使用基于软件的 OpenGL 实现 使用 OpenGL 实现的动态加载的平台。这 通常是Mesa llvmpipe 的修补版本,提供 OpenGL 2.1。如果没有这样的 OpenGL 实现可用,则该值可能无效。这个库的默认名称是opengl32sw.dll,可以 通过设置环境变量QT_OPENGL_DLL 来覆盖。看 特定于平台的页面,例如Qt for Windows,以获取更多信息 信息。此值已在 Qt 5.4 中添加。

【讨论】:

  • 使用 QQuickWindow::setTextRenderType(QQuickWindow::NativeTextRendering)。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这会使用本机渲染来渲染字体。但不能解决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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 2013-02-05
      • 2011-01-05
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多