ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QCustomPlot 对鼠标悬停的轴进行缩放

2022-02-27 22:02:00  阅读:301  来源: 互联网

标签:drawPen PRPDView Qt 缩放 axisRect QCustomPlot yAxis2 鼠标悬停 360


功能

当鼠标悬停在某一个轴上时,滚动鼠标滚轮,可实现对该轴进行缩放,其他轴不变。
请添加图片描述
PRPDView 集成自 QCustomPlot

初始化

void PRPDView::creatInit()
{
    this->yAxis2->setVisible(true);//显示x轴2
    this->yAxis2->setRange(0,10);
    //    this->axisRect()->setupFullAxesBox(true);//会影响轴yAxis2显示
    this->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom |QCP::iSelectAxes);
    this->xAxis->setRange(0,360);   //相位 0~360
    
    mTemplateCurve = addGraph(this->xAxis,this->yAxis);
    mScatterCurve = addGraph(this->xAxis,this->yAxis2);

    QPen drawPen;
    drawPen.setColor(Qt::blue);
    drawPen.setWidth(2);
    mTemplateCurve->setPen(drawPen);

    drawPen.setColor(Qt::red);
    drawPen.setWidth(4);
    mScatterCurve->setPen(drawPen);
    mScatterCurve->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle));
    mScatterCurve->setLineStyle(QCPGraph::lsNone);

    this->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop | Qt::AlignHCenter);   // 对齐于QCPAxisRect中间的顶部

    connect(this, &PRPDView::mouseWheel, this, &PRPDView::slot_mouseWheel);
}

生成模拟数据

void PRPDView::setDemo()
{
    //生成模板图
    QVector<double> xPoints(360),yPoints(360);
    for(int x0 = 0;x0 < 361 ;x0++){
        xPoints.append(x0);
        yPoints.append(qSin((double)x0/360. * 2 * Pi) * 1000);
    }
    this->templateGraph()->setData(xPoints,yPoints);
    //生成随机散点图
    xPoints.clear();
    yPoints.clear();
    for(int cnt = 0;cnt < 5000;cnt++){
        xPoints.append(QRandomGenerator::global()->bounded(1.) * 360.);
        yPoints.append(QRandomGenerator::global()->bounded(1.) * 10.);
    }
    this->scatterGtaph()->setData(xPoints,yPoints);
    this->rescaleValueAxisinRange();
    this->replot();
}

槽函数

void PRPDView::slot_mouseWheel()
{
    QList<QCPAxis*> axes;
    if (xAxis->axisRect()->rect().contains(QCursor::pos())){
        axes<<xAxis;
        axisRect()->setRangeZoomAxes(axes);
        axisRect()->setRangeZoom(xAxis->orientation());
    }
    else if (yAxis->axisRect()->rect().contains(QCursor::pos())){
        axes<<yAxis;
        axisRect()->setRangeZoomAxes(axes);
        axisRect()->setRangeZoom(yAxis->orientation());
    }
    else if(yAxis2->axisRect()->rect().contains(QCursor::pos())){
        axes<<yAxis2;
        axisRect()->setRangeZoomAxes(axes);
        axisRect()->setRangeZoom(yAxis2->orientation());
    }
    else{
        axes<<yAxis<<xAxis<<yAxis2;
        axisRect()->setRangeZoomAxes(axes);
        axisRect()->setRangeZoom(Qt::Horizontal|Qt::Vertical);
    }
}

main

PRPDView *view = new PRPDView();
view->setAttribute(Qt::WA_DeleteOnClose);
view->setDemo();
view->show();

标签:drawPen,PRPDView,Qt,缩放,axisRect,QCustomPlot,yAxis2,鼠标悬停,360
来源: https://blog.csdn.net/qq_41923833/article/details/123170910

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有