QML 创建文本元素需要很长时间

2024-03-17

我注意到在 QML 中创建文本元素需要很长时间。
举个例子:

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 320
    height: 640
    color: "yellow"
    ListView {
        anchors.fill: parent
        model: 1000
        delegate: Component {
            Rectangle {
                width: parent.width
                height: 50
                color: index % 2 == 0 ? "#eee" : "#ddd"
                Text {
                    anchors.fill: parent
                    font { family: "Helvetica"; pixelSize: 15 }
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    text: "9"
                }
            }
        }
    }
}

在 QML Profiler 中,结果如下:

Location        Type        Time in Percent Total Time  Calls   Mean Time   Median Time Longest Time    Shortest Time   Details
<program>                   100.00 %        730.664 ms  1       730.664 ms  730.664 ms  730.664 ms      730.664 ms      Main Program
main.qml:17     Create      82.33 %         601.544 ms  706     852.045 µs  46.227 µs   536.645 ms      7.777 µs        QtQuick/Text
main.qml:9      Create      76.37 %         557.974 ms  2       278.987 ms  557.793 ms  557.793 ms      181.747 µs      QtQuick/ListView
main.qml:4      Create      15.04 %         109.901 ms  2       54.951 ms   109.520 ms  109.520 ms      380.668 µs      QtQuick.Window/Window
main.qml:13     Create      4.90 %          35.826 ms   706     50.744 µs   14.842 µs   20.833 ms       0.438 µs        QtQuick/Rectangle
main.qml:18     Binding     0.74 %          5.397 ms    353     15.288 µs   15.704 µs   86.770 µs       4.841 µs        anchors.fill: parent
main.qml:16     Binding     0.58 %          4.224 ms    353     11.964 µs   11.686 µs   171.614 µs      4.813 µs        color: index % 2 == 0 ? "#eee" : "#ddd"
main.qml:18     JavaScript  0.40 %          2.952 ms    353     8.361 µs    8.689 µs    22.030 µs       2.597 µs        expression for fill
main.qml:16     JavaScript  0.32 %          2.351 ms    353     6.660 µs    6.289 µs    165.754 µs      2.598 µs        expression for color
main.qml:14     Binding     0.26 %          1.870 ms    354     5.282 µs    5.301 µs    31.643 µs       2.261 µs        width: parent.width
main.qml:14     JavaScript  0.19 %          1.419 ms    354     4.007 µs    4.066 µs    12.325 µs       1.591 µs        expression for width
main.qml:1      Compile     0.10 %          759.314 µs  1       759.314 µs  759.314 µs  759.314 µs      759.314 µs      main.qml
main.qml:10     Binding     0.01 %          41.470 µs   1       41.470 µs   41.470 µs   41.470 µs       41.470 µs       anchors.fill: parent
main.qml:10     JavaScript  0.00 %          22.325 µs   1       22.325 µs   22.325 µs   22.325 µs       22.325 µs       expression for fill
main.qml:12     Create      0.00 %          3.321 µs    1       3.321 µs    3.321 µs    3.321 µs        3.321 µs        <component>

正如您所看到的,创建 Text 元素需要非常长的时间。
在委托中有一些文本的另一个项目中,结果如下:

Location                Type        Time in Percent Total Time  Calls   Mean Time   Median Time Longest Time    Shortest Time   Details
PostLikeAndMark.qml:41  Create      79.20 %         1.261 s     46      27.406 ms   60.427 µs   1.257 s         7.124 µs        QtQuick/Text

有什么解决方案可以解决这个问题吗?

UPDATE
在某些情况下,这个问题似乎可能与字体系列有关。 对于最近的一个新项目,我发现使用某些字体系列会引入这个问题。 (Segue UI)
将字体系列更改为其他一些字体,例如Myriad Pro,解决了问题。


我发现,通过尽可能设置 textFormat 属性,可以实现整体性能的相关提高。 当然取决于你的实施。

得到提示:https://doc.qt.io/qt-5/qtquick-performance.html#text-elements https://doc.qt.io/qt-5/qtquick-performance.html#text-elements

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QML 创建文本元素需要很长时间 的相关文章

随机推荐

  • 如何使用 PyYAML 创建当前本地日期和时间

    我希望能够创建一个日期时间对象datetime datetime now PyYAML 调用一些函数很容易 gt gt gt y YAML description Something ts python object apply time
  • iOS 如何从 UISlider 中删除发光/阴影

    如何去除此 UISlider 中的发光 阴影 事实证明 我所需要做的就是设置一个自定义拇指图像 并且阴影不存在
  • 重载 istream 运算符>> C++

    假设我有一个字符向量 我将它作为字符串而不是字符向量推入流中 我如何使用运算符 gt gt 取回字符向量 class C private vector
  • 在 Rails 中提供静态 JSON 对象文件

    如何从 Rails 中的文件提供静态 JSON 对象 我想在ajax调用中访问它 最好的方法是什么 只需将要渲染的内容放入变量中 然后使用render json gt variable列表 字典等都有合理的默认值 看看这个 http gui
  • Spring 相当于 Guice 中的 FactoryModuleBuilder、@AssistedInject 和 @Assisted 的什么?

    是什么Spring框架 http projects spring io spring framework 相当于FactoryModuleBuilder http google github io guice api docs latest
  • Sql Server 死锁对象 ID 太大

    我试图追踪 SQL 2005 数据库 64 位 中发生的死锁 我们目前没有启用快照隔离 我打开 tf 1204 并收到以下输出 从这个输出中 我可以确定节点 1 是一个存储过程 它选择数据并且仅修改 temp 表中的值 节点 2 是另一个存
  • 在运行时更改标记图标

    有没有办法在运行时更改 Google Maps Android API v2 标记的图标 而无需删除 重新添加我想要更改其图标的标记 我可以对其应用变换 如旋转 吗 Thanks 更新后 我可以在运行时轻松更改标记图标Google Play
  • 如何使 TensorFlow 在具有 2.x 功能的 GPU 上运行?

    我已在 Linux Ubuntu 16 04 上成功安装了tensorflow GPU 并进行了一些小的更改 以使其能够与新的 Ubuntu LTS 版本配合使用 然而 我认为 谁知道为什么 我的 GPU 满足计算能力大于 3 5 的最低要
  • Grails 2.4.2 - 动态引用默认数据源

    这个问题已经部分回答了here https stackoverflow com a 10537001 2315900但动态引用默认数据源仍然存在问题 我正在开发一个内部应用程序 它允许开发人员修改我们的多租户应用程序之一的配置设置 并将这些
  • 阻止 IP 地址访问 Heroku 上的 Flask 应用程序?

    我需要在我的网站上阻止一个 IP 地址 在 Heroku 上运行 Flask 应用程序 我看到我的服务器每秒有 50 个请求 这绝对不应该发生 我熟悉在 Apache 服务器上使用 htaccess 这里有类似的东西吗 Gunicorn 服
  • 在 std 命名空间中定义的好友类:有任何保证吗?

    我回答的时候就出现了这个问题这个问题 https stackoverflow com questions 15193108 c unique ptr versus friend class private destructor 151931
  • 在 R 中生成 XML 文档

    在我正在工作的项目中 我需要自动创建一个XML文档取决于用户输入 使用用户输入来修改的部分xml文件对我来说没问题 但我是新创建的xml在 R 中从头开始文档 我想知道是否XML可以使用 R 在 R 中生成如下所示的文档XML or xml
  • JTextField/JTextComponent 中的选择有限?

    考虑一个 JFormattedTextField 或者任何 JTextComponent 实际上 其中在字段的实际 文本 周围显示有一个前缀和一个后缀 例如 双 3 5 将是字符串 通过格式化 3 50 其周围将是前缀 和后缀 用于显示文本
  • 如何使用 html 属性在 MVC 视图中显示文本

    我有以下代码 Html ActionLink Hello User Identity GetUserName Manage Account routeValues null htmlAttributes new title Manage 我
  • 交叉编译到嵌入式 Linux ARM 设备时,针对较旧版本的 libstdc++ 和最新的 GCC

    我们需要为ARM嵌入式linux目标找到一个满足以下条件的交叉编译工具链 内核3 17 GLBC 2 18 编译一些第三方代码需要最新版本的GCC 这些要求促使我使用 crosstool ng 生成自定义交叉编译工具链 我选择了最小内核版本
  • 如何在eclipse中获取平台插件的日志

    我是 eclipse 插件开发的新手 我想在我的插件中自定义一些 Eclipse 功能 所以我想知道 当我在 eclipse 中进行某些操作时 后台会发生什么 例如 文件 gt 新建 gt 项目 我需要调用哪个插件 类 函数的日志 跟踪 您
  • 如何在 IntelliJ 上的 Java12 中使用 JavaFX?

    当我在 jdk12 中创建 JavaFX 文件时 它显示以下错误 未配置 JavaFX 运行时 使用内置 JavaFX 的 JDK 或将 JavaFX 库添加到类路径 我该如何解决这个问题 从 JDK11 开始 JavaFX 已被删除 ht
  • Amazon SNS 移动推送 - 如何批量订阅某个主题的终端节点?

    我正在尝试将现有的 iOS 推送通知基础设施转移到亚马逊 SNS 移动推送 我将所有令牌从本地数据库导出到 SNS 应用程序 使用 CSV 现在我想向所有 10 000 个用户发送推送通知 我认为唯一的方法是创建一个主题并将所有用户订阅该主
  • 如何向帖子收到评论的用户发送通知?

    使用我当前的代码 发表评论的用户会收到一条通知 告诉他们他们发表了评论 发布受到评论的评估的人应该收到通知 通知他们有人对此发表了评论 标准通知内容 但我哪里出错了 评论 rb class Comment lt ActiveRecord B
  • QML 创建文本元素需要很长时间

    我注意到在 QML 中创建文本元素需要很长时间 举个例子 import QtQuick 2 5 import QtQuick Window 2 2 Window visible true width 320 height 640 color