Qt 使用TextArea和ScrollView显示大型文本文件的性能问题
用例: 我想显示使用QML或至少与QML兼容的组件的大型日志文件(8k+行)。多行选择、复制和语法突出显示等功能是必需的 问题: 默认方法是在ScrollView中使用TextArea,但问题是内存使用率高(在我选择了多行的机器上:2GB+)导致冻结(5秒+)和崩溃 示例代码: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
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