pvbrowser manual
Back Content Forward

Gráficos xy

QDraw

Imagen de muestra de QDraw
Imagen de muestra de QDraw

Este es un ejemplo de un grafico-xy. Ingresa un widget de usuario "QDraw" en Qt designer y copia el siguiente trozo de código. Puedes graficar tantas curvas como sea necesario.

#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

Imagen de muestra de QwtPlot
Imagen de muestra de QwtPlot

En Qt designer ingresa un QWT Plot. Asegúrate de configurar "nCurves" y "nMarker" en el máximo valor que desees usar. El código para definir un QWT Plot básico será generado automáticamente. El resto debes programarlo (ver "slotInit()"). El rango de valores en los ejes será determinado automáticamente. Revisa slotNullEvent() para desplegar el gráfico. Copia y pega este trozo de código como ejemplo de uso de 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