int a[2];
float b[maxlength+1];
void Widget::Paint_point(int *a)
{
static int i=0;
//qDebug()<<777;
// qDebug()<<i;
float num = a[0] + float(a[1])/100;
b[i] = num;
static float num_save = 0;
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing,true); //Antialiasing mode
int pointx = 20, pointy = 270; //Corresponding to canvas, or corresponding to Widget
int width = 450 - 20, height = 250;
double xk = width/(maxlength - 0);
double yk = height/(35 - 0);
QPen pen,penPoint;
if(i>=maxlength)
{
right_to(b);
QColor backColor =qRgb(255,255,255); //background color
image.fill(backColor); //填
pen.setColor(Qt::black);
pen.setWidth(2);
penPoint.setColor(Qt::blue);
penPoint.setWidth(5);
painter.drawLine(pointx,pointy,width+pointx,pointy); //Start and end point
painter.drawLine(pointx,pointy,pointx,pointy-height);
i = 0;
num_save = b[0];
while(i<maxlength-1)
{
qDebug()<<b[i];
painter.setPen(penPoint);//Blue pen, used to mark each point
painter.drawPoint(pointx+xk*i,pointy-b[i]*yk);
if(i>=1)
{
painter.setPen(pen);
painter.drawLine(pointx+xk*(i-1),pointy-num_save*yk,pointx+xk*i,pointy-b[i]*yk);
}
i++;
num_save = b[i-1];
}
i++;
num_save = b[i-1];
qDebug()<<b[i];
}else{
//Draw the origin of the axis coordinate axis (35,270)
painter.drawLine(pointx,pointy,width+pointx,pointy); //Start and end point
painter.drawLine(pointx,pointy,pointx,pointy-height);
pen.setColor(Qt::black);
pen.setWidth(2);
penPoint.setColor(Qt::blue);
penPoint.setWidth(5);
painter.setPen(penPoint);//Blue pen, used to mark each point
painter.drawPoint(pointx+xk*i,pointy-b[i]*yk);
if(i>=1)
{
painter.setPen(pen);
painter.drawLine(pointx+xk*(i-1),pointy-num_save*yk,pointx+xk*i,pointy-b[i]*yk);
}
qDebug()<<b[i];
i++;
num_save = b[i-1];
}
}
// move forward one place
void right_to(float *p)
{
for(int i =0;i<maxlength;p++,i++)
{
// qDebug()<<1;
*p = *(p+1);
}
}
The principle is quite simple, that is, the array is moved forward by one, the screen is cleared, and the drawing is redrawn. The difficulty is only in the overall implementation.