2013-09-05 11 views
6

Próbuję wykreślić wykres na podstawie danych, które otrzymałem i zapisałem w wektorze, ale nie mogę znaleźć żadnych tutoriali ani referencji tam i dać mi żadnego wskazania do tego, co muszę zrobić. Więc tutaj jest mój kod:C++ Qwt - Wykreślanie danych z wektora

class Plotter : public QwtPlot 
{ 


    public: 

    Plotter() { 

    } 
}; 



int main(int argc, char **argv) 
{ 

    QApplication app(argc, argv); 

    //Plotter *d_plot = new Plotter(); 

    Plotter* d_plot = new Plotter(); 

    d_plot->setTitle("DEMO"); 
    d_plot->setCanvasBackground(Qt::white); 
    d_plot->setAxisScale(QwtPlot::yLeft, 0.1, 50.0); 
    d_plot->setAxisScale(QwtPlot::yRight, 0.1, 50.00); 

    // PLOT THE DATA 
    std::vector<double> data; 
    data.push_back(1.03); 
    data.push_back(13.12); 
    //.... 

    d_plot->resize(600, 400); 
    d_plot->show(); 


    return app.exec(); 
} 

Czy ktoś może dać mi jakieś pomysły co do funkcji mogę użyć w celu umożliwienia mi wykreślić dane?

Dzięki

+0

Jestem w obliczu tego problemu teraz też. Po prostu chciałbym zapytać, zauważyłem, że twoje pytanie ma tylko jeden wektor danych, a podane odpowiedzi składają się z 2 wektorów danych. Jaki jest inny wektor? Mam nadzieję, że możesz pomóc. Thanks (: – rockinfresh

Odpowiedz

6

Sprawdź docs QwtPlot: normalnie utworzyć QwtPlotCurve, użyj QwtPlotCurve::setSamples aby uzyskać dane w nim wtedy QwtPlotCurve::attach aby uzyskać dane wyciągnięte.

powinno być coś takiego:

std::vector<double> x; 
std::vector<double> y; 
//fill x and y vectors 
//make sure they're the same size etc 
QwtPlotCurve curve("Foo"); 
//or use &x[ 0 ] or &(*x.first()) pre-C++11 
cure.setSamples(x.data(), y.data(), (int) x.size()); 
curve.attach(&plot); 

http://qwt.sourceforge.net/class_qwt_plot_curve.html

http://qwt.sourceforge.net/class_qwt_plot.html

+0

Dziękuję za odpowiedź. Skąd bierzesz '& plot' z? Ponieważ, jeśli użyłem' & d_plot' jako zrobionego w moim o/p to daje mi błąd: 'error: nie można zainicjować parametru typu 'QwtPlot * "z wartością typu" Ploter "** my_curve.attach (& d_plot);" wszelkie pomysły? Dzięki za pomoc :) – Phorce

+0

dla twojej sprawy, wystarczy przekazać d_plot, ponieważ jest to już wskaźnik – stijn

+0

Dzięki za odpowiedź. Zrobiłem to, wszystko skompilowane teraz. Jednak kiedy uruchamiam aplikację, nic nie pokazuje? Czy muszę ustawić kolor pisaka? Dzięki :) – Phorce

4

Jednym ze sposobów byłoby dołączyć krzywą na swojej działce, tj:

QwtPlotCurve myCurve; 
myCurve->attach(&d_plot); 

Mogłabyś następnie użyj (w funkcji członka lub gdziekolwiek potrzebujesz) fu nction QwtPlotCurve::setRawSample który posiada następującą prawie podpis wyjaśniający:

void QwtPlotCurve::setRawSample(const double* xData, const double* yData, int size); 

Określ dane z nim, a następnie zadzwonić replot() odświeżyć fabułę. Oznacza to, że musisz mieć wektor dla wartości x.

kod wyglądałby następująco:

int main(int argc, char **argv) 
{ 
    //... 
    Plotter* d_plot = new Plotter(); 

    //Plot config 

    // PLOT THE DATA 
    std::vector<double> data_y; 
    data_y.push_back(1.03); 
    data_y.push_back(13.12); 
    std::vector<double> data_x; 
    data_x.push_back(1.0); 
    data_x.push_back(2.0); 
    //.... 
    myCurve->setRawSample(data_x.data(),data_y.data(),data_y.size()); 
    d_plot->resize(600, 400); 
    d_plot->replot(); 
    d_plot->show(); 
    //... 
} 

którą proponujemy studiować Qwt doc about curve

Powiązane problemy