模糊的 Qt 快速文本

Posted

技术标签:

【中文标题】模糊的 Qt 快速文本【英文标题】:Blurred Qt Quick Text 【发布时间】: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 对我来说看起来像一个图形驱动程序错误。按钮自动在本机呈现这不是问题。 找到任何解决方案了吗?同样的问题 控件没有模糊,只有文字。 【参考方案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
    

【讨论】:

以上是关于模糊的 Qt 快速文本的主要内容,如果未能解决你的问题,请参考以下文章

QT中ComboBox如何获取选中的文本内容??下面程序出错了,如何改正?

暂停时的快速高斯模糊[关闭]

Android SDK 的快速位图模糊

快速为背景添加模糊效果

返回主视图时不会消除快速模糊效果

Android快速实现动态模糊效果