qt - 在 qml 中显示大文本

标签 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 {}
}

关于qt - 在 qml 中显示大文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51722286/

相关文章:

c++ - 使用 QTabWidget 在运行时单击时将内容加载到选项卡中

javascript - QList<int> 不能用作 Repeater 的模型

c++ - 如何使用十六进制格式更改容器的背景颜色?

c++ - Qt5将QImage转为OpenGL格式

c++ - Qt:当QPointer改变时发出信号

android - 连接 QML 和 Qt

c++ - 枚举类型作为 QML 的 C++ 类中的属性类型

c++ - 我应该如何在 Qt 中构建我的 GUI?

c++ - 从 qml 编辑 QObject 属性

python - 简单的 PyQt5 QML 应用程序导致段错误