【问题标题】:Show big text in qml在 qml 中显示大文本
【发布时间】: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 管理器)。

标签: qt qml


【解决方案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 {}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多