qt - 在 qml 中显示大文本
问题描述
试图在 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;
}
解决方案
找到了部分解决方案。它加载速度更快,消耗的内存少了几倍。缺点之一是无法将 Text 转换为 TextArea 以便能够选择要复制到剪贴板的文本。
property variant stringList: null
function updateText() {
stringList = viewmodel.getLogText().split('\n')
idContentListView.positionViewAtEnd()
}
ListView {
id: idContentListView
model: stringList
anchors {
fill: parent
margins: Dimensions.x(15)
}
delegate: Text {
anchors {
left: parent.left
right: parent.right
}
text: model.modelData
font.pixelSize: Dimensions.y(10)
textFormat: Text.PlainText
wrapMode: Text.Wrap
}
ScrollBar.vertical: ScrollBar {}
}
推荐阅读
- javascript - 在整页脚本中使导航可点击
- cassandra - janusgraph 加载记录期间的提交性能低
- python - 在线更新 Word2Vec
- c++ - 在 C++ 中使用 std::allocator::allocate(0) 分配零个对象
- c - 如何打印我在二维数组中找到最大数字的行?
- python-3.x - 使用另一个名称为每个函数调用保存 CSV
- apache-flink - flink中job、task和subtask的区别
- java - 如何从连接三个表的 Derby 数据库中获取聚合和列数据
- android - 如何配置 Androids sdkmanager 命令行工具以使用自定义存储库?
- php - laravel 队列:工作。如何处理长时间运行的工作?