2014-11-05 42 views
2

我很困惑,使用QwtPlot類來繪製一個自定義的座標系。 我的目標是繪製具有自定義比例的座標系,並在這些自定義比例上繪製網格線。以下是鱗片的值:定製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中畫幾行。但我不知道該怎麼做。

有人幫我!!! 謝謝你提前〜

回答

1

正如你所說的「畫幾條線」是不好的方法,因爲你不能做到這一行無窮大。要做到這一點,有特殊的類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

+0

嗯,謝謝!它的工作原理!你知道如何清除這些線在一個插槽中,並重新顯示此qwtplot與其他線? – HYSuperman 2014-11-06 03:26:06

+0

@HYSuperman你可以設置新值'm6-> setValue(0.642455 * 3,0);'或者如果你想刪除這些行,你可以刪除標記。例如。 '刪除m1; 刪除m2; 刪除m4; 刪除m5; 刪除m3; 刪除m6;' – Chernobyl 2014-11-06 15:03:04

+0

我知道刪除的方法。但是這些行是在我的QwtPlot類的函數中動態創建的。我不能在功能外刪除它們,你看?我無法獲得函數範圍外的名稱。所以下次我想重新繪製整個QwtPlot時,我需要在QwtPlot類中有一些可以清除它的所有行的函數。 @Chernobyl – HYSuperman 2014-11-08 01:36:36

0

更好地創建自己的QwtScaleDiv對象手動設置蜱和使用QwtPlot :: setAxisScaleDiv它們分配()。網格的更新將自動發生(只要你沒有明確解耦)。

當您在縮放時還需要管理打勾位置時,您必須派生自己的縮放引擎 - 重載QwtScaleEngine :: divideScale()方法。