Qwt X轴对数坐标实现坐标拾取

看了尘中远大神的帖子,

https://blog.csdn.net/czyt1988/article/details/51555020

把我之前做的x轴是对数坐标的代码拿出来改了哈。之前看过qtcharts 的 demo CallOut,对数坐标里实现不了。

QwtPlot *poPlot = new QwtPlot;

    /* Set Log Scale */
    poPlot->setAxisScaleEngine( QwtPlot::xBottom, new QwtLogScaleEngine() );
    poPlot->setAxisScaleEngine( QwtPlot::yLeft,   new QwtLogScaleEngine() );

    poPlot->enableAxis(QwtPlot::xBottom , true);
    poPlot->enableAxis(QwtPlot::yLeft   , true);


    (void) new SAXYDataTracker(poPlot->canvas());

    QList<double> adF;

    adF = {0.06125, 0.125,0.25,0.5,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192};

    qSort(adF);

    /* Fill ticks */
    QList<double> adTicks[QwtScaleDiv::NTickTypes];
    adTicks[QwtScaleDiv::MajorTick] = adF;
    QwtScaleDiv oScaleDiv( adTicks[QwtScaleDiv::MajorTick].last(),
            adTicks[QwtScaleDiv::MajorTick].first(),
            adTicks );

    poPlot->setAxisScaleDiv( QwtPlot::xBottom, oScaleDiv );


    /* Curve title, cut MCSD_ & suffix*/
    const QwtText oTxtTitle( "test" );

    /* Create a curve pointer */
    QwtPlotCurve *poCurve = NULL;
    poCurve = new QwtPlotCurve( oTxtTitle );

    poCurve->setPen( Qt::black, 2, Qt::SolidLine );
    poCurve->setRenderHint( QwtPlotItem::RenderAntialiased, true );

    QwtSymbol *poSymbol = new QwtSymbol( QwtSymbol::Ellipse,
                                         QBrush( Qt::yellow ),
                                         QPen( Qt::blue, 2 ),
                                         QSize( 8, 8 ) );
    poCurve->setSymbol( poSymbol );
    poCurve->setStyle(QwtPlotCurve::Lines);

    QPolygonF aoPointF;
    aoPointF.clear();

    for(int i = 0 ; i < adF.count();i++)
    {
        QPointF oPoinF;

        oPoinF.setX(adF.at(i));
        oPoinF.setY(pow(adF.at(i),3.14));

        aoPointF.append(oPoinF);
    }

    poCurve->setSamples( aoPointF );
    poCurve->setAxes(QwtPlot::xBottom, QwtPlot::yLeft);
    poCurve->attach(poPlot);
    poCurve->setVisible( true );

    this->setCentralWidget(poPlot);

得到的效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值