QWT 图表刷新的问题

HkXtUg 2018-01-24 02:25:17


如图,
横坐标范围为 0 - 60000, 5分钟的数据, 实时的.

在数据量还没到 6万 时, 放大图表可以清晰的看到曲线.
当数据点个数达到 6W后, 每当接收并添加新数据到纵坐标数据集时, 我就会将横坐标及纵坐标的前面一截相应长度的数据删掉.

void Curve::addData(QVector<double>& d)
{
// 添加数据至纵坐标数据集
ydata.append(d.toList());
auto len = ydata.size();

// 如果ydata数据量超过6W
if (len > history){
auto div = len - history;
// 擦除ydata前面一截div长度的数据
ydata.erase(ydata.begin(), ydata.begin() + div);
// 擦除xdata前面一截数据并添加新数据
auto maxXVal = xdata.last();
for (int i = 0; i < div; i++)
{
xdata.pop_front();
xdata << (maxXVal + i + 1);
}

// 重置横坐标刻度
parent->setAxisScale(QwtPlot::xBottom, xdata.front(), xdata.last());
}

curve->setSamples(xdata.toVector(), ydata.toVector());
}


在这之后也会调用 replot().

结果就像图中显示的一样,数据还没有6万的时候 缩放结果正常, 能看到曲线.
数据有 6W之后( 总量仍然是6W )缩放看上去就是一大坨一大坨的...完全看不到曲线了.

不过, 在停止采集之后, 也就是不再录入数据后, 图表缩放的结果看上去就正常了.
不知道为何, 有朋友遇到过这个问题吗 ? 怎么办呢...
...全文
869 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdyang.chd 2019-08-18
  • 打赏
  • 举报
回复
感谢恢回复,已经自己改写QwtPicker类实现了简单的功能。
HkXtUg 2019-08-18
  • 打赏
  • 举报
回复
引用 2 楼 sdyang.chd 的回复:
大神,这个竖线并显示数据点值得数据拾取是如何做的?请指点


https://blog.csdn.net/czyt1988/article/details/51555020

我用的这位博主的代码
sdyang.chd 2019-08-04
  • 打赏
  • 举报
回复
大神,这个竖线并显示数据点值得数据拾取是如何做的?请指点
HkXtUg 2018-01-29
  • 打赏
  • 举报
回复
折衷解决了. 在缩放时暂停setAxisScale(...)、setSamples(...)和replot(). 恢复到默认视图时继续刷新... 这样可以避免上述问题.

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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