我对使用 QwtPlot 类绘制自定义坐标系感到困惑。 我的目标是绘制一个具有自定义比例的坐标系,并在这些自定义比例上绘制网格线。以下是比例尺的值:
x轴和y轴刻度:
x1=-0.642455
x2=0
x3=0.642455
y1=-0.642455
y2=0
y3=0.642455
我阅读了QwtPlot class和QwtPlotGrid 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中绘制几行。但我不知道该怎么做。
请有人帮帮我!!! 提前谢谢〜
答案 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);
答案 1 :(得分:0)
更好地创建自己的QwtScaleDiv对象,手动设置刻度并使用QwtPlot :: setAxisScaleDiv()分配它们。网格的更新将自动发生(只要您没有明确地将其解耦)。
当您还需要在缩放时管理刻度线位置时,您必须派生自己的缩放引擎 - 重载QwtScaleEngine :: divideScale()方法。