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);

得到的效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章