在QML中显示大文字

时间:2018-08-07 08:31:50

标签: 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;
}

1 个答案:

答案 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 {}
}