我有一个 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/