pvbrowser manual
Back Content Forward

xy графики

QDraw

Screenshot of QDraw
Screenshot of QDraw

Това е пример за xy-графика. Вкарайте нестандартния визуален обект "QDraw" в Qt designer и копирайте следния код. Може да визуализирате толкова линии, колкото желаете.

#include <math.h>

typedef struct // (todo: define your data structure here)
{
  float x[100];
  float y[100];
  int   n;
}
DATA;

static int drawGraphic(PARAM *p, int id, DATA *d)
{
int x,y,w,h,fontsize;

  x = 80;
  y = 30;
  w = 400;
  h = 300;
  fontsize = 10;

  gBeginDraw  (p,id);
  gSetColor   (p,BLACK);
  gSetFont    (p,TIMES,fontsize,Normal,0);
  gBoxWithText(p,x,y,w,h,fontsize,"phi","sin(phi)",NULL);
  gXAxis      (p,0,1.0f,2.0f*3.141592654f,1);
  gYAxis      (p,-1.5f,0.5f,1.5f,1);
  gXGrid      (p);
  gYGrid      (p);
  gSetColor   (p,RED);
  gSetWidth   (p,4);
  gLine       (p,d->x,d->y,d->n);
  gEndDraw    (p);
  return 0;
}

static int slotInit(PARAM *p, DATA *d)
{
  if(p == NULL || d == NULL) return -1;
  memset(d,0,sizeof(DATA));
  int i;
  float xval;

  for(i=0; i<100; i++) // for testing purposes we set a sinus curve
  {
    xval = (((float) i) * 2.0f * 3.141592654f) / 100.0f;
    d->x[i] = xval;
    d->y[i] = (float) sin(xval);
  }
  d->n = 100;

  return 0;
}

static int slotButtonEvent(PARAM *p, int id, DATA *d)
{
  if(p == NULL || id == 0 || d == NULL) return -1;
  if(id == pushButtonDraw)
  {
    drawGraphic(p, draw1, d);
  }
  return 0;
}

QwtPlot

Screenshot of QwtPlot
Screenshot of QwtPlot

Вкарайте QWT Plot в Qt designer и настройте "nCurves" и "nMarker" на максималните стойности които искате да използвате. Кода, необходим за създаването на обикновен QWT Plot, ще бъде генериран. Останалото трябва да бъде програмирано - прегледайте "slotInit()". Обхвата на стойностите по осите, ще се определи автоматично. За да визуализирате крива вижте slotNullEvent().

пример за qwt plot Моля копирайте кода от следния пример.

typedef struct // (todo: define your data structure here)
{
  double xa[100];
  double ya[100];
}
DATA;

static int slotInit(PARAM *p, DATA *d)
{
  // outline
  qpwEnableOutline(p,qwtPlot1,1);
  qpwSetOutlinePen(p,qwtPlot1,GREEN);

  // legend
  qpwSetAutoLegend(p,qwtPlot1,1);
  qpwEnableLegend(p,qwtPlot1,1);
  qpwSetLegendPos(p,qwtPlot1,0);
  qpwSetLegendFrameStyle(p,qwtPlot1,Box|Sunken);

  // axes
  qpwSetAxisTitle(p,qwtPlot1,xBottom, "Normalized Frequency");
  qpwSetAxisTitle(p,qwtPlot1,yLeft, "Amplitude");

  // curves
  qpwInsertCurve(p,qwtPlot1,0,"Sinus");
  qpwSetCurvePen(p,qwtPlot1,0,YELLOW,3,DashDotLine);
  qpwSetCurveYAxis(p,qwtPlot1,0,yLeft);

  for(int i=0; i<100; i++) // here we set a sinus curve
  {
    d->xa[i] = (((double) i) * 2.0 * 3.141592654) / 100.0;
    d->ya[i] = sin(d->xa[i]);
  }

  return 0;
}

static int slotNullEvent(PARAM *p, DATA *d)
{
  if(p == NULL || d == NULL) return -1;
  qpwSetCurveData(p,qwtPlot1,0,100,d->xa,d->ya);
  //qpwSetCurveSymbol(p,qwtPlot1,0,MarkerDiamond,RED,BLUE,10,10);
  qpwReplot(p,qwtPlot1);
  //qpwRemoveCurve(p,wtPlot1,0);
  return 0;
}

Back Content Forward