【发布时间】:2018-08-08 18:25:33
【问题描述】:
试图在 qml 中显示一个文本文件。文件大小约为 3 兆字节。同时还有:
- 表格的长开口,
- 大量浪费内存。
尝试使用 ScrollView、Flickable、Text 和 TextArea。如何避免这些问题?
QML
ScrollView {
id: idScrollView
anchors {
fill: parent
margins: Dimensions.x(15)
}
Text {
id: idContent
anchors {
left: parent.left
right: parent.right
rightMargin: Dimensions.x(20)
}
text: viewmodel.getLogText()
font.pixelSize: Dimensions.y(10)
wrapMode: Text.Wrap
}
}
C++
QString MainViewModel::getLogText()
{
const int maxSz = 1024 * 200;
QString result;
QFile file(ALog::filePath());
if (file.open(QIODevice::ReadOnly))
{
if (file.size() > maxSz)
file.seek(file.size() - maxSz);
QByteArray arr = file.read(maxSz);
result = QString::fromLatin1(arr);
if (file.size() > maxSz)
result = QString("Skip %1 Kb\n\n").arg((file.size() - maxSz)/1024) + result;
file.close();
}
return result;
}
【问题讨论】:
-
在
readOnly模式下使用TextEdit即可。 -
不幸的是,它没有帮助。
-
尝试将文件放入资源文件或从FS打开。可能问题是长时间加载,而不是长时间渲染。
viewmodel是什么? -
能否提供
viewmodel的代码?您也应该使用textDocument 来实现改进。您还可以将加载文档的过程移至侧面 - 所需代码的详细信息。 -
勾选,getLogText 函数运行速度非常快。添加了其当前内容。现在只给出 200 KB 的文本。但它有延迟打开和增加大约 70 兆字节的内存(根据 Windows 管理器)。