[Qt-interest] repaint()
phil prentice
philp.cheer at talktalk.net
Tue Sep 21 18:06:50 CEST 2010
Hi Atlant
I really appreciate your help. This is probably where I am coming unstuck.
Basically the application is talking to hardware inside my for loop. I was
then hoping that a redraw within the for loop would directly cause a repaint
event which would ripple down to a widget which would then read (as part of
its paintEvent) the new data generated from the hardware and update the
screen.
This does not happen, so I am obviously missing something.
I just naively thought that redraw() would force a draw for all widgets???
Its probably because QT does not actually think anything has changed???
At the moment my widget paintEvent() looks like this (Its only experiment
mode). I am just trying to play around with data, to see what sort of flicker
effect I might get. My problem is that the paintEvent() is not being called
when I call redraw??? I have six VIgraph objects. These objects get drawn at
start, but not when I go into continuos mode; The repaint just does not
call:-
void VIgraph::paintEvent(QPaintEvent *event)
{
qDebug("CALL");
static int frig[6];
static int p1[40] = { 0, 30, 5, 40, 30, 10, 40, 5, 47, 0,
47, -10, 35, -20, 30, -30, 10, -45, 0, -42,
-5, -50, -10, -40, -30, -30, -40, -10, -50, -5,
-47, 10, -30, 20, -20, 25, -10, 30, 0, 30, };
static int p2[40] = { 5, 35, 10, 45, 35, 15, 45, 10, 30, 0,
40, -15, 40, -25, 35, -35, 15, -50, 0, -47,
-10, -55, -15, -45, -35, -35, -45, -15, -55, -10,
-20, 15, -35, 25, -25, 30, -15, 35, 5, 35, };
QFrame::paintEvent(event);
QPainter painter(this);
painter.setWindow(-50, -50, 100, 100);
painter.drawLine(-50, 0, 50, 0);
painter.drawLine(0, -50, 0, 50);
int me = objectName().toInt();
QPoint pList1[20];
if(frig[me])
{
frig[me] = 0;
int j = 0;
for(int i = 0; i < 20; i++)
{
pList1[i].setX(p1[j++]);
pList1[i].setY(p1[j++]);
}
}
else
{
frig[me] = 1;
int j = 0;
for(int i = 0; i < 20; i++)
{
pList1[i].setX(p2[j++]);
pList1[i].setY(p2[j++]);
}
}
painter.drawPolyline(pList1, 20);
}
On Tuesday 21 September 2010 13:09, you wrote:
> Phil:
>
> I'm unclear on where the "data ready to be redrawn"
> has any opportunity to be effective. That is, when
> you're within the for loop, Qt is asked to do the
> repaint() and has the opportunity to do the repaint
> (when you call processEvents()), but what has actually
> changed that will paint any differently than the last
> time the loop invoked the repaint?
>
> Atlant
>
> -----Original Message-----
> From: qt-interest-bounces at trolltech.com
> [mailto:qt-interest-bounces at trolltech.com] On Behalf Of phil prentice Sent:
> Tuesday, September 21, 2010 08:39
> To: qt-interest at trolltech.com
> Subject: [Qt-interest] repaint()
>
> Hi everyone
>
> I would be grateful for a little help using paintEvent(). I have an
> application that has a "Continuous Button". I have implemented the slot
> using the following basic code.
> void VIwindow::continuousSlot() // SLOT
> {
> static bool running = false;
> if(m_continuousButton->text() == "Stop")
> {
> running = false;
> return;
> }
> else
> {
> running = true;
> m_continuousButton->setText("Stop");
> repaint(); // Force a direct update. Works!!!
> for(;;)
> {
> // Update some widgets with data ready to be redrawn
> repaint(); // The widgets are not being drawn????
> // Check for stop being pressed.
> QCoreApplication::processEvents();
> if(!running)
> break;
> }
> m_continuousButton->setText("Continuous");
> }
> }
>
> The mechanism works very well except the repaint in the for loop does not
> do anything. I know this is probably a very basic question, but why??
>
> Thankyou for your help
>
> Phil
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
> This e-mail and the information, including any attachments, it contains are
> intended to be a confidential communication only to the person or entity to
> whom it is addressed and may contain information that is privileged. If the
> reader of this message is not the intended recipient, you are hereby
> notified that any dissemination, distribution or copying of this
> communication is strictly prohibited. If you have received this
> communication in error, please immediately notify the sender and destroy
> the original message.
>
> Thank you.
>
> Please consider the environment before printing this email.
More information about the Qt-interest-old
mailing list