21.Qcustomplot绘制波形图--Apple的学习笔记

一,前言

之前已经完成了小工具的一部分,主要新增的内容是Table表的使用。本次要做的是绘制波形图。

二,需求

使用customplot来绘制波形图,并且可以有示波器计算时间差这样的划线功能。

三,遇到的问题

1. 没有widget UI的界面如何添加customplot?
答:官网介绍的是在UI界面进行widget提升。理解了提升操作对代码的影响后,就可以知道没有ui界面应该如何写代码了。

    QWidget *ware = new QWidget;
    QCustomPlot *myPlot = new QCustomPlot(ware);

2. 如何实时刷新波形
答:思路是x轴设置为时间坐标,然后启动一个timer周期倒计时。每隔100ms更新数据,重绘一次即可。

void MainWindow::updateDataSlot()
{
    double time;
    // 获取从1970-0-0到现在的ms值
    time = QDateTime::currentMSecsSinceEpoch()/1000.0;
    // 添加随机数据到graph
    myPlot->graph(0)->addData(time, qrand() % 80 - 5);
#if 1
    // 重新设定x轴范围为最近20个时刻,则视图可以动起来
    myPlot->xAxis->setRange(time, 20, Qt::AlignRight);
    myPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
#else
    myPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
    // 自动调整坐标最高点和最低点,所以视图可以动起来
    myPlot->graph(0)->rescaleAxes();
    // 左端点阶梯线样式
    myPlot->graph(0)->setLineStyle(QCPGraph::lsStepLeft);
    // 显示散点
    myPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));
#endif
    // 重绘
    myPlot->replot();
}

3. 如何画竖线打标签?
答:其实类似于游标的思路。我2年前的blog已经写过了,当初专门学习过QCustomPlot一段时间qcustomplot游标测量功能--Apple的学习笔记,所以以前的东西复习下就灵活的用起来了。

void MainWindow::updateDataSlot()
{
    int static cnt;
    cnt++;
    curtime = QDateTime::currentMSecsSinceEpoch()/1000.0;
    // 添加数据到graph
    myPlot->graph(0)->addData(curtime, qrand() % 80 - 5);
    // 设置图形离散值标注的格式,包括点,叉,空心圆,菱形等
    myPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDiamond, 3));
    if((cnt%40)==0)
    {
        // 画TAG线
        createVLineTag(cnt);
    }
    // 重新设定x轴范围为最近20个时刻,则视图可以动起来
    myPlot->xAxis->setRange(curtime, 20, Qt::AlignRight);
    // 重绘
    myPlot->replot();
}
void MainWindow::createVLineTag(int val)
{
    // 设置游标垂直线
    QCPItemStraightLine *m_vline = new QCPItemStraightLine(myPlot);
    m_vline->setLayer("overlay");
    // 颜色随机
    m_vline->setPen(QPen(m_graphColorList[qrand() % 6], 1,Qt::DashLine));
    // 超出坐标轴范围则不显示游标线
    m_vline->setClipToAxisRect(true);
    // 画竖线,x为curtime,y只要0和1即可绘制直线了
    m_vline->point1->setCoords(curtime, 0);
    m_vline->point2->setCoords(curtime, 1);
    // 设置文本框
    QCPItemText *m_currentLabel = new QCPItemText(myPlot);
    m_currentLabel->setLayer("overlay");
    // 超出坐标轴范围则不显示标签
    m_currentLabel->setClipToAxisRect(true);
    m_currentLabel->setPadding(QMargins(3,3,3,3));
    m_currentLabel->setPen(QPen(QColor(130, 130, 130), 0, Qt::DotLine));
    m_currentLabel->setBrush(Qt::NoBrush);
    // 可以设置显示位置跟随锚点的位置,此次我设置的是绝对位置,添加TAG用的
    m_currentLabel->position->setCoords(curtime+0.4,75);
    m_currentLabel->setFont(QFont("Arial",8));
    m_currentLabel->setColor(Qt::red);
    m_currentLabel->setText(QString::number(val));
}

四,效果

QCustom画竖线标签.png

五,小结

今天为了我的小工具,复习了下QCustomPlot。不过不是游标的应用了,而是绘制波形,并且打竖线TAG。只要掌握了API,就可以灵活实现各种想要的功能。当我能复用2年前的code的时候,我觉得学习到的东西总有一天会用到,为自己没有虚度年华,感到很开心~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  • 一,前言 发现了身边的需求,我准备为此做个小工具。包括信息输出及绘制波形图。今天先解决表格信息显示。 二,需求 按...
    applecai阅读 2,581评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,539评论 28 53
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 3,785评论 0 5
  • 上周六在压力下实在需要释放,去西塘躲了两天,真是好地方,很优雅的江南古镇,而且与周庄比开发不算过度。 我们是周五半...
    聚塔阅读 806评论 2 2
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,732评论 3 8