使用TextArea和ScrollView显示大文本文件的性能问题

问题描述 投票:0回答:1

用例:我想显示使用QML或至少与QML兼容的组件的大型日志文件(8k +行)。多行选择,复制和语法突出显示等功能是必需的。

问题:默认方法是在ScrollView中使用TextArea,但问题是内存使用率高(在我的计算机上选择了多行:2GB +)导致冻结(5sec +)并崩溃。

示例代码:

import QtQuick 2.12
import QtQuick.Controls 2.5
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("TextEditTest")
    ScrollView {
        id: scrollView
        anchors.fill: parent

        TextArea {
            id: textArea
            text: " "
            renderType: Text.NativeRendering
            textFormat: Text.PlainText
            placeholderText: "no text found"
            readOnly: true
            selectByMouse: true
        }
    }
}

((只需在“”中插入一些文本(8k +行)

问题:是否可以提高TextArea + ScrollView的内存使用率?还是有其他选择?

可能的解决方案?:仍使用TextEdit,但提供了自己的滚动功能,该功能可以按需加载文本,从而防止一次渲染整个文本。问题是我必须在现有功能的基础上编写自己的选择和复制功能。

qt qml desktop-application qtquick2
1个回答
0
投票

This comment from Jira总结问题并提供可能的解决方案:

Qt Quick的TextEdit实际上将在场景图中填充所有字形的节点,而不仅仅是可见字形的节点。有逻辑来尽可能地隔离更新,但是所有文本的所有几何都必须至少处理一次并上载到GPU,并为此生成绘图调用。

所以最重要的是,TextEdit目前不适合这种大小的文本。在解决此问题之前,我建议您改用QQuickPaintedItem和QTextDocument。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.