轮子五:QCustomPlot常用类

 1.坐标标签类   QCPAxisTickerText

//调整X轴标签显示
    QVector<QString> labels;
    QVector<double> xPos;
    m_xTickNumLess = 10;
    labels.resize(m_xTickNumLess);
    xPos.resize(m_xTickNumLess);
    double posSpan = qFloor(1.0*histogramSize/m_xTickNumLess);  //显示部分柱标签
    double labelSpan = (maxPw-minPw)/histogramSize*posSpan;
    for(int i = 0; i < m_xTickNumLess; i++){
        xPos[i] = i*posSpan + 1 /*+ qFloor(posSpan/2.0)*/;  //刻度位置挪到图中间
        //柱标签为统计区间的中间位置所代表的值
        labels[i] = QString::number(minPw + i*labelSpan /*+ (0.5+qFloor(posSpan/2.0))*(maxPw-minPw)/histogramSize*/, 'f', 2) + "us";
    }
    QSharedPointer<QCPAxisTickerText> xTicker(new QCPAxisTickerText);
    xTicker->addTicks(xPos, labels);
    ui->widget_pwStatisticsPlot->xAxis->setTicker(xTicker);

    ui->widget_pwStatisticsPlot->replot();

2. QCPGraph类 画曲线 散点 空心点 类型选择

        //先清空graph
        ui->checkBox_scatterPoint->setCheckState(Qt::Checked);
        ui->widget_freqStatisticsPlot->clearGraphs();
        ui->widget_freqStatisticsPlot->clearPlottables();

        //设置属性:散点
        QCPGraph * curGraph = ui->widget_freqStatisticsPlot->addGraph();
        curGraph->setLineStyle(QCPGraph::lsNone);
        curGraph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 4));
        //设置坐标标签 界面背景颜色
        initTable(ui->widget_freqStatisticsPlot," ","频率(MHz)");
        //设置点颜色
        ui->widget_freqStatisticsPlot->graph()->setPen(QColor(Qt::yellow));
        ui->widget_freqStatisticsPlot->replot();

3. QCPBars类  柱状图

    QCPBars *bar = new QCPBars(ui->widget_freqStatisticsPlot->xAxis, 
    ui->widget_freqStatisticsPlot->yAxis);
    bar->setWidthType(QCPBars::wtPlotCoords);

    bar->setBrush(Qt::blue);

    //计算绘图数据
    QVector<double> index;
    index.resize(histogramSize);
    for(int i = 1; i <= histogramSize; i++){
        index[i-1] = i;   //x轴数据从1~histogramSize
    }
    bar->setData(index, values);

4. QCPRange类 坐标范围调整

    //必须先rescale坐标轴,使得坐标轴按数据设置好后再进行调整
    ui->widget_freqStatisticsPlot->rescaleAxes();
    QCPRange xRange = ui->widget_freqStatisticsPlot->xAxis->range();
    double barWidth = bar->width();
    ui->widget_freqStatisticsPlot->xAxis->setRange(xRange.lower-0.5*barWidth,         
    xRange.upper+0.5*barWidth);

5.坐标自动 更新自定义标签

    //设置刻度标签个数
    m_nXTickerCnt = m_stInitSet.stX.nTickerCnt;
    m_nYTickerCnt = m_stInitSet.stY.nTickerCnt;

    //设置x轴QCPAxisTickerText
    ui->FreqPlot->xAxis->ticker().clear();
    m_pXaxisTicker.clear();
    m_pXaxisTicker = QSharedPointer<QCPAxisTickerText>(new QCPAxisTickerText);
    connect(ui->FreqPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), this,         
    SLOT(slot_XaxisRangeChanged(QCPRange)),Qt::UniqueConnection);
    ui->FreqPlot->xAxis->setTicker(m_pXaxisTicker);
void QCustomFrequencyPlot::slot_YaxisRangeChanged(QCPRange newRange)
{
    double tickLen = newRange.size()/m_nYTickerCnt;//刻度标签间距
    m_pYaxisTicker->clear();
    QVector<double> ticks;//标签位置
    QVector<QString> labels;//标签显示的值
    for(int i=0; i<=m_nYTickerCnt; i++)
    {
        ticks.push_back(newRange.lower + i*tickLen);

#if 1  //Y轴刻度都加标签
    labels.push_back(QString::number(newRange.lower + i*tickLen,'f',0));
    
#else  //Y轴最上方刻度不加标签
    if(m_nYTickerCnt != i)
    {
        labels.push_back(QString("%1").arg(newRange.lower + i*tickLen));
    }
    else
    {
        //labels.push_back(m_stInitSet.stY.strUnit);
    }
#endif
    }
    m_pYaxisTicker->addTicks(ticks, labels);//更新刻度标签
}

6.QCPTextElement类,图表的标题

    //载频统计分布图
    int layoutRows = ui->widget_freqStatisticsPlot->plotLayout()->rowCount();
    if(layoutRows == 1){    //只有在未添加标题时添加标题
        QString strTitle;
        strTitle = QStringLiteral("载频统计分布图");
        QCPTextElement *title;
        title = new QCPTextElement(ui->widget_freqStatisticsPlot, strTitle);
        title->setTextColor(Qt::white);

        ui->widget_freqStatisticsPlot->plotLayout()->insertRow(0);
        ui->widget_freqStatisticsPlot->plotLayout()->addElement(0, 0, title);
    }

7.设置 图表标签Legend

void init()
{
    QStringList temp_title_list;
    QVector<QColor> temp_color_list;

    ui->widget_amplitude->legend->setVisible(true);
    temp_title_list.clear();
    temp_title_list<<"幅度(主)"<<"幅度(副)";
    temp_color_list.clear();
    temp_color_list<<QColor(211,231,47)<<QColor(28,111,249);

    SetValueState(temp_title_list,temp_color_list);       
}
void RadioDataForm::SetValueState(QStringList temp_title_list, QVector<QColor> color_list)
{
 ui->widget_amplitude->addGraph();
        ui->widget_amplitude->graph(i)->setName(temp_title_list.at(i));

        title_list.append(temp_title_list.at(i));

        QPen pen;
        pen.setColor(color_list.at(i));
        pen.setWidth(2);

        ui->widget_amplitude->graph(i)->setPen(pen);
    }
    setLegendPosition(ui->widget_amplitude);
}


void RadioDataForm::setLegendPosition( QCustomPlot *plot )
{
    plot->legend->setBrush(QColor(169,169,169));//设置图例背景
    int count = plot->plotLayout()->rowCount();
    QMargins marg(100,1,10,1);

    plot->legend->addElement(0,1,plot->legend->item(1));
    plot->legend->addElement(0,2,plot->legend->item(2));

    marg.setLeft(200);
    marg.setRight(200);
    plot->legend->setMargins(marg);

    plot->legend->setBorderPen(Qt::NoPen);
    plot->plotLayout()->addElement(count,0,plot->legend);
    plot->plotLayout()->setRowStretchFactor(count, 0.001);
}

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老赵的博客

叮咚,你的赏钱已到账,嘿嘿嘿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值