Qt 在qml中显示大文本

Qt 在qml中显示大文本,qt,qml,Qt,Qml,正在尝试在qml中显示文本文件。文件大小约为3兆字节。同时还有: 长时间打开表格 大量的内存浪费 尝试使用ScrollView、Flickable、Text和TextArea。如何避免这些问题 QML C++ 找到了部分解决方案。它的加载速度要快得多,占用的内存要少好几倍。缺点之一是无法将文本转换为TextArea以选择要复制到剪贴板的文本 property variant stringList: null function updateText() { stringList =

正在尝试在qml中显示文本文件。文件大小约为3兆字节。同时还有:

  • 长时间打开表格
  • 大量的内存浪费
尝试使用ScrollView、Flickable、Text和TextArea。如何避免这些问题

QML

C++


找到了部分解决方案。它的加载速度要快得多,占用的内存要少好几倍。缺点之一是无法将文本转换为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 {}
}

只需在
readOnly
模式下使用即可。不幸的是,这没有帮助。请尝试将文件放入资源文件或从FS打开。可能是加载时间长,渲染时间不长。什么是
viewmodel
?能否提供
viewmodel
的代码?此外,您还应该使用以实现改进。您还可以将加载文档的过程移到侧面,这需要代码的详细信息。添加了它当前的内容。现在只有200千字节的文本。但它在打开时有延迟,并增加了大约70兆字节的内存(根据Windows管理器)。
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;
}
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 {}
}