#include <qapplication.h> #include <qwt_plot.h> #include <qwt_plot_marker.h> #include <qwt_plot_curve.h> #include <qwt_legend.h> #include <qwt_data.h> #include <qwt_text.h> #include <qwt_math.h> #include <math.h> //----------------------------------------------------------------- // simple.cpp // // A simple example which shows how to use QwtPlot and QwtData //----------------------------------------------------------------- class SimpleData: public QwtData { // The x values depend on its index and the y values // can be calculated from the corresponding x value. // So we donĀ“t need to store the values. // Such an implementation is slower because every point // has to be recalculated for every replot, but it demonstrates how // QwtData can be used. public: SimpleData(double(*y)(double), size_t size): d_size(size), d_y(y) { } virtual QwtData *copy() const { return new SimpleData(d_y, d_size); } virtual size_t size() const { return d_size; } virtual double x(size_t i) const { return 0.1 * i; } virtual double y(size_t i) const { return d_y(x(i)); } private: size_t d_size; double(*d_y)(double); }; class Plot : public QwtPlot { public: Plot(); }; Plot::Plot() { setTitle("A Simple QwtPlot Demonstration"); insertLegend(new QwtLegend(), QwtPlot::RightLegend); // Set axis titles setAxisTitle(xBottom, "x -->"); setAxisTitle(yLeft, "y -->"); // Insert new curves QwtPlotCurve *cSin = new QwtPlotCurve("y = sin(x)"); #if QT_VERSION >= 0x040000 cSin->setRenderHint(QwtPlotItem::RenderAntialiased); #endif cSin->setPen(QPen(Qt::red)); cSin->attach(this); QwtPlotCurve *cCos = new QwtPlotCurve("y = cos(x)"); #if QT_VERSION >= 0x040000 cCos->setRenderHint(QwtPlotItem::RenderAntialiased); #endif cCos->setPen(QPen(Qt::blue)); cCos->attach(this); // Create sin and cos data const int nPoints = 100; cSin->setData(SimpleData(::sin, nPoints)); cCos->setData(SimpleData(::cos, nPoints)); // Insert markers // ...a horizontal line at y = 0... QwtPlotMarker *mY = new QwtPlotMarker(); mY->setLabel(QString::fromLatin1("y = 0")); mY->setLabelAlignment(Qt::AlignRight|Qt::AlignTop); mY->setLineStyle(QwtPlotMarker::HLine); mY->setYValue(0.0); mY->attach(this); // ...a vertical line at x = 2 * pi QwtPlotMarker *mX = new QwtPlotMarker(); mX->setLabel(QString::fromLatin1("x = 2 pi")); mX->setLabelAlignment(Qt::AlignLeft | Qt::AlignBottom); mX->setLabelOrientation(Qt::Vertical); mX->setLineStyle(QwtPlotMarker::VLine); mX->setLinePen(QPen(Qt::black, 0, Qt::DashDotLine)); mX->setXValue(2.0 * M_PI); mX->attach(this); } int main(int argc, char **argv) { QApplication a(argc, argv); Plot plot; #if QT_VERSION < 0x040000 a.setMainWidget(&plot); #endif plot.resize(600,400); plot.show(); return a.exec(); }