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

Qt 使用TextArea和ScrollView显示大型文本文件的性能问题,qt,qml,desktop-application,qtquick2,Qt,Qml,Desktop Application,Qtquick2,用例: 我想显示使用QML或至少与QML兼容的组件的大型日志文件(8k+行)。多行选择、复制和语法突出显示等功能是必需的 问题: 默认方法是在ScrollView中使用TextArea,但问题是内存使用率高(在我选择了多行的机器上:2GB+)导致冻结(5秒+)和崩溃 示例代码: import QtQuick 2.12 import QtQuick.Controls 2.5 ApplicationWindow { visible: true width: 640 heigh

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

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

示例代码:

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的内存使用率?还是有其他选择

可能的解决方案:仍然使用文本编辑,但提供了自己的滚动功能,可根据需要加载文本,防止一次呈现整个文本。问题是我必须在现有功能的基础上编写自己的选择和复制功能。

总结了问题并提供了可能的解决方案:

Qt Quick的TextEdit实际上将使用所有图示符的节点填充场景图,而不仅仅是可见图示符。有逻辑尽可能地隔离更新,但所有文本的所有几何体必须至少处理一次并上传到GPU,并为其生成绘制调用

所以底线是文本编辑目前不适合这种大小的文本。在解决这个问题之前,我建议改用QQuickPaintedItem和QTextDocument