csvivek
21st March 2008, 08:33
Hello There,
i am developing an application to display 2D objects on screen with Qt4.2.2
i am using QPainter class :confused:to show objects on the screen.
The Requirement is to show small ellipse like objects. The Total number of objects is 500 and all these should be updated on the screen in micro seconds.
i find the QPainter Class taking time of about 200 milliseconds on average to update atleast 300 plots.i use update() method to avoid flicker.
should i need to use repaint class to update the screen()?if yes then how shall i avoid flicker.
is there any other method other than repaint() or update() to display the objects?
should i need to use QPainter Class or is there any other option to update the screen in microseconds?
Thanks in Advance...:D
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1);
void AnalogClock::paintEvent(QPaintEvent *)
{
int side = qMin(width(), height());
static int i = 0, j =0;
static int flag = 1;
int diameter;
if(j<420)
{
j++;
}
else
{
printf("\nThe cleint exited");
exit(0);
}
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
side =qMin(width(),height() );
painter.translate(side / 2, side / 2);
painter.drawRect(-side/2,-side/2,side,side);
painter.fillRect(QRect(-side/2,-side/2,side,side),QBrush(Qt::black));
static const QPointF points[4] = {
QPointF(0,-side/2),
QPointF(0,side/2),
QPointF(-side/2,0),
QPointF(side/2,0)
};
painter.setPen(QPen(Qt::green,1,Qt::DotLine));
painter.drawLines(points,2);
painter.setPen(QPen(Qt::green));
painter.drawText(420,0,"60.0");
painter.drawText(350,0,"50.0");
painter.drawText(280,0,"40.0");
painter.drawText(210,0,"30.0");
painter.drawText(140,0,"20.0");
painter.drawText(70,0,"10.0");
painter.save();
painter.restore();
painter.setPen(QPen(Qt::green));
for (diameter = 140; diameter<=840; diameter+=140)
{ painter.drawEllipse(QRect(-diameter / 2, -diameter / 2,
diameter, diameter));
}
painter.setPen(QPen(Qt::black));
for(i = 1; i <= 420; i= i+5)
{
if(flag == 1)
{
painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)) ;
flag = 0;
}
else
{
painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern) );
flag = 1;
}
painter.drawEllipse(QRect(i,j,10,10));
painter.drawEllipse(QRect(-i,j,10,10));
painter.drawEllipse(QRect(i,-j,10,10));
painter.drawEllipse(QRect(-i,-j,10,10));
}
painter.end();
}
i am developing an application to display 2D objects on screen with Qt4.2.2
i am using QPainter class :confused:to show objects on the screen.
The Requirement is to show small ellipse like objects. The Total number of objects is 500 and all these should be updated on the screen in micro seconds.
i find the QPainter Class taking time of about 200 milliseconds on average to update atleast 300 plots.i use update() method to avoid flicker.
should i need to use repaint class to update the screen()?if yes then how shall i avoid flicker.
is there any other method other than repaint() or update() to display the objects?
should i need to use QPainter Class or is there any other option to update the screen in microseconds?
Thanks in Advance...:D
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1);
void AnalogClock::paintEvent(QPaintEvent *)
{
int side = qMin(width(), height());
static int i = 0, j =0;
static int flag = 1;
int diameter;
if(j<420)
{
j++;
}
else
{
printf("\nThe cleint exited");
exit(0);
}
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
side =qMin(width(),height() );
painter.translate(side / 2, side / 2);
painter.drawRect(-side/2,-side/2,side,side);
painter.fillRect(QRect(-side/2,-side/2,side,side),QBrush(Qt::black));
static const QPointF points[4] = {
QPointF(0,-side/2),
QPointF(0,side/2),
QPointF(-side/2,0),
QPointF(side/2,0)
};
painter.setPen(QPen(Qt::green,1,Qt::DotLine));
painter.drawLines(points,2);
painter.setPen(QPen(Qt::green));
painter.drawText(420,0,"60.0");
painter.drawText(350,0,"50.0");
painter.drawText(280,0,"40.0");
painter.drawText(210,0,"30.0");
painter.drawText(140,0,"20.0");
painter.drawText(70,0,"10.0");
painter.save();
painter.restore();
painter.setPen(QPen(Qt::green));
for (diameter = 140; diameter<=840; diameter+=140)
{ painter.drawEllipse(QRect(-diameter / 2, -diameter / 2,
diameter, diameter));
}
painter.setPen(QPen(Qt::black));
for(i = 1; i <= 420; i= i+5)
{
if(flag == 1)
{
painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)) ;
flag = 0;
}
else
{
painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern) );
flag = 1;
}
painter.drawEllipse(QRect(i,j,10,10));
painter.drawEllipse(QRect(-i,j,10,10));
painter.drawEllipse(QRect(i,-j,10,10));
painter.drawEllipse(QRect(-i,-j,10,10));
}
painter.end();
}