QCustomPlot使用关键点总结

1、设置基础特性

    curveWidget->plotLayout()->insertRow(0);     // pCurveWidget、curveWidget为在ui中定义的QCustomPlot对象指针
    QString sTitle = tr("实时曲线");
    m_pCurvTitle = new QCPTextElement(curveWidget, sTitle);   
    curveWidget->plotLayout()->addElement(0, 0, m_pCurvTitle);    //给坐标设置标题
    curveWidget->xAxis->setLabel(tr("相对时间(秒)"));                    //设置横坐标标题
    curveWidget->yAxis->setLabel(tr("幅值"));                                //设置纵坐标标题
    curveWidget->xAxis->setRange(-m_nCurveDataNum, 0);      //设置横坐标显示范围
    curveWidget->replot();

2、添加曲线

    int nCount = m_lstNCurvHar.count();
    for (int nIndex = 0; nIndex < nCount; nIndex++)
    {
        int nHarN = m_lstNCurvHar.at(nIndex);
        pCurveWidget->addGraph(pCurveWidget->xAxis, pCurveWidget->yAxis);      //添加曲线
        QString sHarName = GetHarName(nHarN);
        pCurveWidget->graph()->setName(sHarName);                                               //设置曲线名称
        QPen graphPen;
        graphPen.setColor(QColor(rand()%245+10, rand()%245+10, rand()%245+10));
        pCurveWidget->graph()->setPen(graphPen);                                                  //设置曲线显示颜色
    }

3、设置曲线显示效果

   pCurveWidget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes | QCP::iSelectLegend |           QCP::iSelectPlottables);
    pCurveWidget->legend->setVisible(true);
    QFont legendFont = font();
    legendFont.setPointSize(10);
    pCurveWidget->legend->setBrush(QColor(255,255,255,100));                           //图例框背景透明
    pCurveWidget->legend->setFont(legendFont);                                                    //图例框字体大小
    pCurveWidget->legend->setSelectedFont(legendFont);
    pCurveWidget->legend->setSelectableParts(QCPLegend::spItems);
    int nGraphNum = pCurveWidget->graphCount();
    if(nGraphNum > 8)                                                                     //根据曲线条数设置图例框中曲线图例位置
       { 
            for(int i = 0; i < 5; i++)
              {
                pCurveWidget->legend->addElement(i,0,pCurveWidget->legend->item(i));  //前五条放在第一列
              }
            for(int i = 5; i < pCurveWidget->graphCount(); i++)
               {
                pCurveWidget->legend->addElement(i-5,1,pCurveWidget->legend->item(i));  //后面曲线放在第二列
              }       
        }

4、给曲线添加数据
for (int nIndex = 0; nIndex < nCount; nIndex++)      //nCount为添加到坐标中的曲线数目
   {
             QCPGraph *pGraph = curveWidget->graph(nIndex);  

              QVector<double> x(nDataCount), y(nDataCount);
               for (int nArrayID = 0; nArrayID <= nLArrayLast; nArrayID++, i++)
                    {
                        x[i] = nArrayID;
                        y[i] = m_dHarIharAmpVal[nArrayID][nCurvHar-1];
                    }

                 pGraph->setData(x,y,true);           //给曲线设置数据
      }

如果实时刷新曲线数据,则用下面方法添加新数据

pGraph->addData(nNewWaterLevel, m_dHarIharAmpVal[nNewArrayID][nCurvHar-1]);

5、设置曲线显示效果

        double dValueDiff = pCurveWidget->yAxis->range().upper - pCurveWidget->yAxis->range().lower;
        double dValueMid = (pCurveWidget->yAxis->range().upper + pCurveWidget->yAxis->range().lower) / 2.0;
        if (dValueDiff < m_dCurveMinDiff / 5.0)                //m_dCurveMinDiff = 0.5,根据曲线值来调整坐标刻度自适应
        {
            pCurveWidget->yAxis->setRange(dValueMid, dValueDiff * 3.60, Qt::AlignVCenter);
        }
        else if (dValueDiff < m_dCurveMinDiff)
        {
            pCurveWidget->yAxis->setRange(dValueMid, dValueDiff * 2.00, Qt::AlignVCenter);
        }
        else
        {
            pCurveWidget->yAxis->setRange(dValueMid, dValueDiff * 1.20, Qt::AlignVCenter);
        }
    
        pCurveWidget->xAxis->setRange(pCurveWidget->xAxis->range().upper, m_nCurveDataNum, Qt::AlignRight);

以这种方法来设置自适应时,当曲线值恒定时,纵轴刻度会不断增大,需要修改QCustomPlot中的函数rescaleValueAxis(bool onlyEnlarge=false, bool inKeyRange=false),修改地方可参考下图:


              

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QCustomPlot 是一个功能强大、灵活易用的开源绘图小部件库。它可以在Qt应用程序中创建可定制和交互式的绘图窗口。 使用手册详细讲解了QCustomPlot库的各种功能和用法。使用手册中的第一部分介绍了安装QCustomPlot,包括如何获取并集成库文件到项目中。第二部分解释了如何创建QCustomPlot实例,设置横轴和纵轴的范围,以及如何添加数据。手册提供了示例代码,方便开发者理解和使用。 手册的第三部分涵盖了各种绘图元素的绘制和自定义。开发者可以学习如何添加图表标题、轴标签和图例。手册还介绍了如何绘制折线图、散点图和柱状图,并解释了如何进行绘图属性的自定义,如颜色、样式和线宽等。 第四部分讲解了绘图交互和响应事件。开发者可以学习如何平移、缩放和选择绘图,以及如何处理各种交互事件,如鼠标点击和拖动。 最后,使用手册提供了一些附加功能和技巧。开发者可以学习如何添加数学和统计函数、图像贴图、自定义绘图样式和绘制函数曲线等高级功能。 总而言之,QCustomPlot使用手册提供了全面而详细的关于如何使用这个库的指导。通过学习和实践,开发者可以灵活使用QCustomPlot创建自定义和交互式的绘图窗口。无论是初学者还是有经验的开发者,都可以从这个手册中获得帮助,提升绘图应用程序的质量和用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值