Qt QcustomPlot 多条Y轴在垂直布局中对齐的方法

关于QcustomPlot 的概念就不多赘述了。这篇摘记主要记录我处理多个坐标系(QCPAxisRect)在同一个QcustomPlot::Plotlayout中垂直布局的情况下,当坐标轴范围收缩调整的时候使得多条Y轴总能对齐的方法.

进入正题:

/* 一、构建多个坐标系,并按行插入布局。 */
        for (int i = 0; i < 10 - 1; i++)
        {

            QCPAxisRect *axisRect = new QCPAxisRect(ui->customplot, true);
            // 下面这两行使得Y轴轴线总是对齐
            axisRect->setAutoMargins(QCP::MarginSide::msLeft | QCP::MarginSide::msRight);
            axisRect->setMarginGroup(QCP::msLeft | QCP::MarginSide::msRight, m_customplot_st.msGroup);

            // add common X-axis to rect
            axisRect->axes().append(m_customplot_st.common_axisRect->axis(QCPAxis::atBottom));

            foreach (auto axis, axisRect->axes())
            {
                axis->setLayer("axes");
            }

            // set Y-axis properties
            QCPAxis *axis_Y = axisRect->axis(QCPAxis::atLeft);
            axis_Y->setRange(m_customplot_st.axisY_map.value(item->text())->range());
            axis_Y->setBasePen(m_customplot_st.axisY_map.value(item->text())->basePen());
            axis_Y->grid()->setVisible(false);
            axis_Y->setObjectName(item->text());

            // set yAxis label
            axis_Y->setPadding(20);
            QCPItemText* label = setYaxisLabel(axis_Y, m_customplot_st.axisY_map.value(item->text())->label(), axisRect);
            // update/insert map
            m_customplot_st.yAxisLable_map[item->text()] = label;

            // set X-axis properties
            QCPAxis *axis_X = axisRect->axis(QCPAxis::atBottom);
            axis_X->setTicks(false);
            axis_X->grid()->setVisible(false);
            axis_X->setRange(m_customplot_st.common_axisRect->axis(QCPAxis::atBottom)->range());
            connect(axis_X, SIGNAL(rangeChanged(QCPRange)), this, SLOT(slot_XaxisRangeChanged(QCPRange)));

            
            // bind newly Y-axis to graph
            m_customplot_st.graphs.value(item->text())->setValueAxis(axis_Y);
            // bind newly X-axis to graph
            m_customplot_st.graphs.value(item->text())->setKeyAxis(axis_X);
            // add axisRect to element
            ui->customplot->plotLayout()->addElement(i, 0, axisRect);
            // update signal to axes map
            m_customplot_st.axisX_map[item->text()] = axis_X;
            m_customplot_st.axisY_map[item->text()] = axis_Y;
            // map signal to axisRect
            m_customplot_st.signalToAxisRectMap[item->text()] = axisRect;
        }

/* 上面代码使得Y轴轴线始终对齐,下面的代码使得Y轴的标签始终对齐  */
QCPItemText *DataAquisition::setYaxisLabel(QCPAxis *yAxis, QString label, QCPAxisRect *rect)
{
    QCPItemText* yAxisLabel = new QCPItemText(ui->customplot);
    yAxisLabel->setText(label);
    yAxisLabel->setRotation(90);
    yAxisLabel->position->setAxisRect(rect);
    yAxisLabel->setClipToAxisRect(false);
    //x is absolut position
    yAxisLabel->position->setTypeX(QCPItemPosition::ptAbsolute);
    //y is relativ to AxesRect
    yAxisLabel->position->setTypeY(QCPItemPosition::ptAxisRectRatio);
    yAxisLabel->position->setAxes(0, yAxis);
    yAxisLabel->position->setCoords(10, 0.5);

    return yAxisLabel;
}


  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值