A Rectangle Draw "Benchmark"
This example continuously draws rectangles in a window and
has another widget that counts the number of rectangles that
are drawn per second.
Header file: /****************************************************************************
** $Id: qt/examples/forever/forever.h 2.2.1 edited 2000-08-31 $
**
** Definition of something or other
**
** Created : 979899
**
** Copyright (C) 1997 by Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#ifndef FOREVER_H
#define FOREVER_H
#include <qwidget.h>
const int numColors = 120;
class Forever : public QWidget
{
Q_OBJECT
public:
Forever( QWidget *parent=0, const char *name=0 );
protected:
void paintEvent( QPaintEvent * );
void timerEvent( QTimerEvent * );
private slots:
void updateCaption();
private:
int rectangles;
QColor colors[numColors];
};
#endif
Implementation:
/****************************************************************************
** $Id: qt/examples/forever/forever.cpp 2.2.1 edited 2000-08-31 $
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include <qtimer.h>
#include <qpainter.h>
#include <qapplication.h>
#include <stdlib.h> // defines rand() function
#include "forever.h"
//
// Forever - a widget that draws rectangles forever.
//
//
// Constructs a Forever widget.
//
Forever::Forever( QWidget *parent, const char *name )
: QWidget( parent, name )
{
for (int a=0; a<numColors; a++) {
colors[a] = QColor( rand()&255,
rand()&255,
rand()&255 );
}
rectangles = 0;
startTimer( 0 ); // run continuous timer
QTimer * counter = new QTimer( this );
connect( counter, SIGNAL(timeout()),
this, SLOT(updateCaption()) );
counter->start( 1000 );
}
void Forever::updateCaption()
{
QString s;
s.sprintf( "forever - %d rectangles/second", rectangles );
rectangles = 0;
setCaption( s );
}
//
// Handles paint events for the Forever widget.
//
void Forever::paintEvent( QPaintEvent * )
{
QPainter paint( this ); // painter object
paint.setWindow( 0, 0, 1024, 1024 ); // define coordinate system
paint.setPen( NoPen ); // do not draw outline
paint.setBrush( colors[rand() % numColors]);// set random brush color
QPoint p1( rand()&1023, rand()&1023 ); // p1 = top left
QPoint p2( rand()&1023, rand()&1023 ); // p2 = bottom right
QRect r( p1, p2 );
paint.drawRect( r ); // draw filled rectangle
}
//
// Handles timer events for the Forever widget.
//
void Forever::timerEvent( QTimerEvent * )
{
for ( int i=0; i<100; i++ ) {
repaint( FALSE ); // repaint, don't erase
rectangles++;
}
}
//
// Create and display Forever widget.
//
int main( int argc, char **argv )
{
QApplication a( argc, argv ); // create application object
Forever always; // create widget
a.setMainWidget( &always ); // set as main widget
always.show(); // show widget
return a.exec(); // run event loop
}
Copyright © 2000 Trolltech | Trademarks
| Qt version 2.2.1
|