尝试以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;
}
答案 0 :(得分:1)
找到了部分解决方案。它加载速度更快,并且消耗更少的内存。缺点之一是-无法将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 {}
}