The example program on this page may be used, distributed and modified
without limitation.
Hello, World
This example brings up the words "Hello, World" moving up and down,
and in different colors.
//
// File: hello.h
//
// Definition of the Hello widget.
//
#ifndef HELLO_H
#define HELLO_H
#include <qwidget.h>
class Hello : public QWidget
{
Q_OBJECT
public:
Hello( const char *text, QWidget *parent=0, const char *name=0 );
signals:
void clicked();
protected:
void mouseReleaseEvent( QMouseEvent * );
void paintEvent( QPaintEvent * );
private slots:
void animate();
private:
QString t;
int b;
};
#endif
//
// File: hello.cpp
//
// Implementation of the Hello widget.
//
#include "hello.h"
#include <qpushbt.h>
#include <qtimer.h>
#include <qpainter.h>
#include <qpixmap.h>
/*
Constructs a Hello widget. Starts a 40 ms animation timer.
*/
Hello::Hello( const char *text, QWidget *parent, const char *name )
: QWidget(parent,name), t(text), b(0)
{
QTimer *timer = new QTimer(this);
connect( timer, SIGNAL(timeout()), SLOT(animate()) );
timer->start( 40 );
resize( 200, 100 );
}
/*
This private slot is called each time the timer fires.
*/
void Hello::animate()
{
b = (b + 1) & 15;
repaint( FALSE );
}
/*
Handles mouse button release events for the Hello widget.
We emit the clicked() signal when the mouse is released inside
the widget.
*/
void Hello::mouseReleaseEvent( QMouseEvent *e )
{
if ( rect().contains( e->pos() ) )
emit clicked();
}
/*
Handles paint events for the Hello widget.
Flicker-free update. The text is first drawn in the pixmap and the
pixmap is then blt'ed to the screen.
*/
void Hello::paintEvent( QPaintEvent * )
{
static int sin_tbl[16] = {
0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38};
if ( t.isEmpty() )
return;
// 1: Compute some sizes, positions etc.
QFontMetrics fm = fontMetrics();
int w = fm.width(t) + 20;
int h = fm.height() * 2;
int pmx = width()/2 - w/2;
int pmy = height()/2 - h/2;
// 2: Create the pixmap and fill it with the widget's background
QPixmap pm( w, h );
pm.fill( this, pmx, pmy );
// 3: Paint the pixmap. Cool wave effect
QPainter p;
int x = 10;
int y = h/2 + fm.descent();
int i = 0;
p.begin( &pm );
p.setFont( font() );
while ( t[i] ) {
int i16 = (b+i) & 15;
p.setPen( QColor((15-i16)*16,255,255,QColor::Hsv) );
p.drawText( x, y-sin_tbl[i16]*h/800, &t[i], 1 );
x += fm.width( t[i] );
i++;
}
p.end();
// 4: Copy the pixmap to the Hello widget
bitBlt( this, pmx, pmy, &pm );
}
Generated at 17:19, 1997/09/30 for Qt version 1.30 by the webmaster at Troll Tech