QChart实时性能
QChart realtime performance
我正在使用QChart进行应用程序。应用程序需要实时显示一些数据。图表中将有一个图表和24 个系列。每个通道的数据速率为400pts。
我使用另一个线程来接收和处理接收的数据,并将处理后的数据发送到一个插槽以附加数据以更新图表系列。
我指的是 https://doc.qt.io/qt-5/qtcharts-audio-example.html。在我的例子中,每个系列限制为 2000 点,如果序列中的点数小于 2000,则将新点添加到序列中,如果系列中的点数超过 2000,删除第一个点,将其余数据向左移动并在最后添加新点。这将使图表看起来像是从右向左移动。
为了获得良好的性能,我还使用了series->replace()
和series->setUseOpenGL(true)
。
我的问题是应用程序在启动时很快就会冻结。我尝试删除更新图表的代码,一切看起来都很好。谁能帮我提高更新图表的性能?
谢谢!
我有同样的问题。我认为主要问题是,QLineSeries
pointAdded()
发送信号并触发重绘。此外,append()
和remove
是性能下沉。据我所知,QtChart只支持QList
,不支持任何形式的环形缓冲区。
我尝试了将新数据放入QQueue<QPointsF>
并在设置为 20 Hz 的计时器汉勒中复制数据的方法。为避免更新,我禁用了这些:
void
MyGraph::handle_timer_timeout()
{
_chartView->setUpdatesEnabled(false);
// _chart->removeSeries(_series);
while(_buf->count()>0){
_series->append(_buf->dequeue());
_series->remove(0);
}
// _chart->addSeries(_series);
_axisX->setRange( _series->at(0).x(),
_series->at(_seriesSize-1).x());
_axisY->setRange(-1,1);
_chartView->setUpdatesEnabled(true);
}
这导致处理器使用率降低约 20-30%。
我还发现临时删除该系列(removeSeries()
,addseries()
(可能会导致一些改进的提示,但我无法确认。
这可能更好,但还不够好。我希望有人找到更好的解决方案。
或使用QLineSeries::replace()
.为此,我使用双缓冲区QVector<QVector<QPointF>> *_lists
:
void
MyGraph::handle_timer_timeout()
{
_chartView->setUpdatesEnabled(false);
auto listsother = (_listsCrurrent+1)%2;
auto bufcnt = _buf->count();
//
QVector<QPointF> *newData = &_lists->data()[listsother];
int idx;
for(idx=0; idx<_seriesSize-bufcnt;idx++){
newData->replace(
idx,
_lists->at(_listsCrurrent).at(idx+bufcnt));
}
for(; idx<_seriesSize;idx++){
newData->replace(
idx,
_buf->dequeue());
}
_listsCrurrent = listsother;
_series->replace(_lists->at(_listsCrurrent));
_axisX->setRange( _series->at(0).x(),
_series->at(_seriesSize-1).x());
_axisY->setRange(-1,1);
_chartView->setUpdatesEnabled(true);
}
这在我的计算机上性能更高。
或者,您可以查看QWT。
阅读Qt示例"OpenGL加速系列示例"。这应该可以解决您的问题。我一直在不同的项目中使用QChart。其中一个同时吃了14块地,没有任何问题。我认为QChart很棒。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么constexpr的性能比正常表达式差
- QChart实时性能
- 使用C STL StringStream记录具有实时性能要求
- 为了获得性能而避免多态性值得吗
- C++记录器的性能和便携性
- 并行性与线程 - 性能
- 实时音频应用程序,提高性能
- 在c++中使用多态性和函子实现快速性能
- OpenCV在Java与C++中的实时性能
- 并提高.进程间牺牲性能来实现可移植性
- 检查矢量的可用性(性能问题)
- 标准C++11是否保证high_resolution_clock测量实时性(非CPU周期)