自定义QwtPlot的比例和网格线

时间:2014-11-05 11:08:13

标签: c++ qt qwt

我对使用 QwtPlot 类绘制自定义坐标系感到困惑。 我的目标是绘制一个具有自定义比例的坐标系,并在这些自定义比例上绘制网格线。以下是比例尺的值:

x轴和y轴刻度:

x1=-0.642455
x2=0
x3=0.642455
y1=-0.642455
y2=0
y3=0.642455

我阅读了QwtPlot classQwtPlotGrid class的用户指南。我在 QwtPlotGrid 类中找到了一个名为 setxDiv 的函数,似乎它可以提供帮助,所以我编写了以下代码:

QList<double> doubleListmin;//min scale
QList<double> doubleListmed;//medium scale
QList<double> doubleListmaj;//major scale
doubleListmin.append(0.1);
doubleListmed.append(0.3);
doubleListmaj.append(0.642455);
QList<double> doubleList[3];
doubleList[0] = doubleListmin;
doubleList[1] = doubleListmed;
doubleList[2] = doubleListmaj;
QwtScaleDiv *xDiv = new QwtScaleDiv(-0.642455, 0.642455, doubleList);
//lowerbound is -0.642455, upperbound is 0.642455, doubleList customizes the scale

QwtPlotGrid *grid = new QwtPlotGrid();
grid->setXDiv(*xDiv);
//grid->updateScaleDiv(*xDiv, *xDiv);
grid->attach(this);

但事实证明它对新的QwtPlotGrid没有影响,它不会改变它的比例系统。

我认为还有另一种方法:在QwtPlot中绘制几行。但我不知道该怎么做。

请有人帮帮我!!! 提前谢谢〜

2 个答案:

答案 0 :(得分:1)

如你所说&#34;画几条线&#34;这不是一个好方法,因为你不能做这个无限的线。要做到这一点,有一个特殊的类QwtPlotMarker,这在这里更合适。也许这不是世界上最好的东西,但可以按照你的意愿工作:

        QwtPlotMarker *m1=new QwtPlotMarker;
        m1->setLinePen(QPen(Qt::gray));
        m1->setLineStyle(QwtPlotMarker::VLine);
        m1->setValue(0,0);
        m1->attach(ui->qwtPlot);
        QwtPlotMarker *m2=new QwtPlotMarker;
        m2->setLinePen(QPen(Qt::gray));
        m2->setLineStyle(QwtPlotMarker::HLine);
        m2->setValue(0,0);
        m2->attach(ui->qwtPlot);
        QwtPlotMarker *m3=new QwtPlotMarker;
        m3->setLinePen(QPen(Qt::gray));
        m3->setLineStyle(QwtPlotMarker::HLine);
        m3->setValue(0,-0.642455);
        m3->attach(ui->qwtPlot);
        QwtPlotMarker *m4=new QwtPlotMarker;
        m4->setLinePen(QPen(Qt::gray));
        m4->setLineStyle(QwtPlotMarker::HLine);
        m4->setValue(0,0.642455);
        m4->attach(ui->qwtPlot);
        QwtPlotMarker *m5=new QwtPlotMarker;
        m5->setLinePen(QPen(Qt::gray));
        m5->setLineStyle(QwtPlotMarker::VLine);
        m5->setValue(-0.642455,0);
        m5->attach(ui->qwtPlot);
        QwtPlotMarker *m6=new QwtPlotMarker;
        m6->setLinePen(QPen(Qt::gray));
        m6->setLineStyle(QwtPlotMarker::VLine);
        m6->setValue(0.642455,0);
        m6->attach(ui->qwtPlot);

enter image description here

答案 1 :(得分:0)

更好地创建自己的QwtScaleDiv对象,手动设置刻度并使用QwtPlot :: setAxisScaleDiv()分配它们。网格的更新将自动发生(只要您没有明确地将其解耦)。

当您还需要在缩放时管理刻度线位置时,您必须派生自己的缩放引擎 - 重载QwtScaleEngine :: divideScale()方法。