qt 用qt chart做上位机实时显示曲线

qq_20711691 2018-01-04 07:55:35
单片机每秒传500个点 但是chart画图每秒可能只有20个点 而且还延时 问下怎么回事啊 画图时我是逐点更新的

void MainWidget::updateData(float value)///////更新数据函数
{
int i;
QVector<QPointF> oldData = SplineSeries->pointsVector();
QVector<QPointF> oldData3 =scatterSeries->pointsVector();
QVector<QPointF> data;///////////新的数据变量
QVector<QPointF> data3;///////////新的数据变量

if (oldData.size() < 250) {
data=SplineSeries->pointsVector();//////////////把之前数据点量大小没超过97的复制到新的数据变量data里面
data3=scatterSeries->pointsVector();
} else {
/* 添加之前老的数据到新的vector中,不复制最前的数据,即每次替换前面的数据
* 由于这里每次只添加1个数据,所以为1,使用时根据实际情况修改
*/
/*

for (i = 1; i < oldData.size(); ++i) {
data.append(QPointF(i - 1 , oldData.at(i ).y()));
data3.append(QPointF(i - 1 , oldData.at(i ).y()));
}
}

qint64 size = data.size();
for(i = 0; i < 1; ++i)
{
data.append(QPointF(i + size, value));///////////到时我这里是单片机给他的
data3.append(QPointF(i + size, value));

}
SplineSeries->replace(data);///重新替换整个数据//////也相当于加载坐标点集
scatterSeries->replace(data3);
count++;


}
...全文
2321 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
#Page# 2021-02-13
  • 打赏
  • 举报
回复
这个玩意儿cpu占用率太高了
画城丶 2020-06-29
  • 打赏
  • 举报
回复
怎么在曲线上显示数值呢
draculamx 2019-12-12
  • 打赏
  • 举报
回复
你这个函数,每次只更新一个点吗??那效率太差了,传入数组,批量更新比较好哦。。
Noor 2019-12-06
  • 打赏
  • 举报
回复
引用 2 楼 springsun_xu 的回复:
电影放映的标准是每秒放映24帧,每秒遮挡24次,刷新率是每秒48次。这里的帧就是画面,也就是说电影每秒放映24幅画面,以达到动画的效果。

研究表明,人眼承受的极限为每秒55帧,还有研究表明,每秒60帧以上可以明显提升观众的观影感受。每秒120帧是每秒24帧的5倍,采用这样的拍摄技术可以让画面更加栩栩如生,让观众仿佛置身其中,给人一种似真似幻的感觉。

所以,采用每秒24帧的画面频率符合这一规律,可以使我们察觉不到画面的中断。


所以你可以对收到的数据暂时不画, 每1000/24 ,约40毫秒才画一次否则来点就画忙不过来,并且可以对40ms中的画法做优化,这样可以提高画图效率了。
另外收数据和画图放在两个线程里。


每秒画1000/24个点,这样看起来不是连续的的曲线延伸,而是一蹦一蹦的出现出现,一次出现一截,如果仔细看的画
  • 打赏
  • 举报
回复
自己绘制,用ScrollDC卷动显示区域,每次只绘制新增的点
springsun_xu 2019-06-20
  • 打赏
  • 举报
回复
这个波形看起来是心电波形,所以给你建议如下: 1)每40ms画一次,每秒画25次; 2)如果效率还不够高则要对对收上来的原始数据进行分析,在不损伤图形前提下根据规则简化数据,减少画线次数。 3)把接收数据与画图部分分在两个线程里完成。
springsun_xu 2019-06-20
  • 打赏
  • 举报
回复
电影放映的标准是每秒放映24帧,每秒遮挡24次,刷新率是每秒48次。这里的帧就是画面,也就是说电影每秒放映24幅画面,以达到动画的效果。 研究表明,人眼承受的极限为每秒55帧,还有研究表明,每秒60帧以上可以明显提升观众的观影感受。每秒120帧是每秒24帧的5倍,采用这样的拍摄技术可以让画面更加栩栩如生,让观众仿佛置身其中,给人一种似真似幻的感觉。 所以,采用每秒24帧的画面频率符合这一规律,可以使我们察觉不到画面的中断。 所以你可以对收到的数据暂时不画, 每1000/24 ,约40毫秒才画一次否则来点就画忙不过来,并且可以对40ms中的画法做优化,这样可以提高画图效率了。 另外收数据和画图放在两个线程里。
qq_20711691 2018-01-04
  • 打赏
  • 举报
回复

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧