performance - 文本区域记录速度慢

标签 performance qt qml raspbian raspberry-pi2

我有一个 Qt 应用程序,我想显示一些日志。我使用 TextArea。但是,如果日志很大或事件来得太快,GUI 就无法足够快地绘制 Textarea

我已经用 Qt Creator (QML Profiler) 分析了这个问题,如果日志很大,则绘制 GUI 需要 300 毫秒。我在 Raspberry Pi2 上使用这个软件。

有什么想法可以解决这个问题吗?我应该使用其他 QML 控件吗?谢谢。

QML代码:

TextArea {
    text: appHandler.rawCommunication
    readOnly: true        
}

C++ 代码:

Q_PROPERTY(QString rawCommunication READ rawCommunication WRITE setrawCommunication NOTIFY rawCommunicationChanged)

void setrawCommunication(QString val)
{
    val.append("\n");
    val.append(m_rawCommunication);
    m_rawCommunication = val;
    emit rawCommunicationChanged(m_rawCommunication);
}

最佳答案

使用 view ,例如 ListView 。他们instantiate their delegates as needed ,基于 View 表示需要显示的数据,具体取决于用户在列表中的位置。这意味着它们在可视化大量数据方面比 TextArea 等项目表现得更好,在您的情况下,这些项目将在内存中保留大量且不断增长的字符串。

您的delegate然后可以是一个 TextArea,这样每个日志行就有一个可编辑的文本 block 。但是,如果您不需要样式,我建议使用更轻的东西,例如 TextEdit 。更进一步:如果您不需要可编辑文本,请使用普通的旧 Text。切换到这些可能不会产生太大的影响,但如果您仍然看到速度缓慢(并且一次有很多委托(delegate)可见),那么值得一试。

关于performance - 文本区域记录速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31345096/

相关文章:

c++ - 将共享指针还是原始指针传递给函数

performance - 在 Haskell 中运行跨平台、确定性模拟的最有效方法是什么?

performance - 显示 MongoDB 的执行计划/统计信息

c++ - 我如何在Qt中绘制一个半透明的矩形?

qt - PyQt/Qt 设置样式表。如何不在背景图像周围显示边框

c++ - Qt应用程序中 undefined reference 错误

qml - 如何对 QML 属性实现约束

javascript - 如果在 qml 中的其他地方定义了数字动画属性,则对象不会动画

Qt QML Gridview 如何限制显示的项目?

javascript - 将点击事件绑定(bind)到空选择器是否危险?