看了尘中远大神的帖子,
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);
得到的效果: