<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/espenr/tmp/qt - 3.3.8 - espenr - 2499/qt - x11 - free - 3.3.8/examples/scribble/scribble.doc:5 -->
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > Simple Painting Application< / title >
< style type = "text/css" > < ! - -
fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; }
-->< / style >
< / head >
< body >
< table border = "0" cellpadding = "0" cellspacing = "0" width = "100%" >
< tr bgcolor = "#E5E5E5" >
< td valign = center >
< a href = "index.html" >
< font color = "#004faf" > Home< / font > < / a >
| < a href = "classes.html" >
< font color = "#004faf" > All Classes< / font > < / a >
| < a href = "mainclasses.html" >
< font color = "#004faf" > Main Classes< / font > < / a >
| < a href = "annotated.html" >
< font color = "#004faf" > Annotated< / font > < / a >
| < a href = "groups.html" >
< font color = "#004faf" > Grouped Classes< / font > < / a >
| < a href = "functions.html" >
< font color = "#004faf" > Functions< / font > < / a >
< / td >
< td align = "right" valign = "center" > < img src = "logo32.png" align = "right" width = "64" height = "32" border = "0" > < / td > < / tr > < / table > < h1 align = center > Simple Painting Application< / h1 >
< p >
This example implements the famous scribble example. You can draw around
in the canvas with different pens and save the result as picture.
< p > < hr >
< p > Header file:
< p > < pre > /****************************************************************************
** $Id: qt/scribble.h 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#ifndef SCRIBBLE_H
#define SCRIBBLE_H
#include < < a href = "qmainwindow-h.html" > ntqmainwindow.h< / a > >
#include < < a href = "qpen-h.html" > ntqpen.h< / a > >
#include < < a href = "qpoint-h.html" > ntqpoint.h< / a > >
#include < < a href = "qpixmap-h.html" > ntqpixmap.h< / a > >
#include < < a href = "tqwidget-h.html" > tqwidget.h< / a > >
#include < < a href = "qstring-h.html" > ntqstring.h< / a > >
#include < < a href = "qpointarray-h.html" > ntqpointarray.h< / a > >
class TQMouseEvent;
class TQResizeEvent;
class TQPaintEvent;
class TQToolButton;
class TQSpinBox;
class Canvas : public < a href = "tqwidget.html" > TQWidget< / a >
{
< a href = "metaobjects.html#TQ_OBJECT" > TQ_OBJECT< / a >
public:
Canvas( < a href = "tqwidget.html" > TQWidget< / a > *parent = 0, const char *name = 0 );
void setPenColor( const < a href = "ntqcolor.html" > TQColor< / a > & c )
< a name = "x903" > < / a > { pen.< a href = "ntqpen.html#setColor" > setColor< / a > ( c ); }
void setPenWidth( int w )
< a name = "x904" > < / a > { pen.< a href = "ntqpen.html#setWidth" > setWidth< / a > ( w ); }
< a href = "ntqcolor.html" > TQColor< / a > penColor()
< a name = "x902" > < / a > { return pen.< a href = "ntqpen.html#color" > color< / a > (); }
int penWidth()
< a name = "x905" > < / a > { return pen.< a href = "ntqpen.html#width" > width< / a > (); }
void save( const < a href = "ntqstring.html" > TQString< / a > & filename, const < a href = "ntqstring.html" > TQString< / a > & format );
void clearScreen();
protected:
void mousePressEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
void mouseReleaseEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
void mouseMoveEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
void resizeEvent( < a href = "qresizeevent.html" > TQResizeEvent< / a > *e );
void paintEvent( < a href = "qpaintevent.html" > TQPaintEvent< / a > *e );
< a href = "ntqpen.html" > TQPen< / a > pen;
< a href = "ntqpointarray.html" > TQPointArray< / a > polyline;
bool mousePressed;
< a href = "ntqpixmap.html" > TQPixmap< / a > buffer;
};
class Scribble : public < a href = "ntqmainwindow.html" > TQMainWindow< / a >
{
TQ_OBJECT
public:
Scribble( < a href = "tqwidget.html" > TQWidget< / a > *parent = 0, const char *name = 0 );
protected:
Canvas* canvas;
< a href = "ntqspinbox.html" > TQSpinBox< / a > *bPWidth;
< a href = "ntqtoolbutton.html" > TQToolButton< / a > *bPColor, *bSave, *bClear;
protected slots:
void slotSave();
void slotColor();
void slotWidth( int );
void slotClear();
};
#endif
< / pre >
< p > < hr >
< p > Implementation:
< p > < pre > /****************************************************************************
** $Id: qt/scribble.cpp 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "scribble.h"
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
#include < < a href = "qevent-h.html" > ntqevent.h< / a > >
#include < < a href = "qpainter-h.html" > ntqpainter.h< / a > >
#include < < a href = "qtoolbar-h.html" > ntqtoolbar.h< / a > >
#include < < a href = "qtoolbutton-h.html" > ntqtoolbutton.h< / a > >
#include < < a href = "qspinbox-h.html" > ntqspinbox.h< / a > >
#include < < a href = "qtooltip-h.html" > ntqtooltip.h< / a > >
#include < < a href = "qrect-h.html" > ntqrect.h< / a > >
#include < < a href = "qpoint-h.html" > ntqpoint.h< / a > >
#include < < a href = "qcolordialog-h.html" > ntqcolordialog.h< / a > >
#include < < a href = "qfiledialog-h.html" > ntqfiledialog.h< / a > >
#include < < a href = "qcursor-h.html" > ntqcursor.h< / a > >
#include < < a href = "tqimage-h.html" > tqimage.h< / a > >
#include < < a href = "qstrlist-h.html" > ntqstrlist.h< / a > >
#include < < a href = "qpopupmenu-h.html" > ntqpopupmenu.h< / a > >
#include < < a href = "qintdict-h.html" > ntqintdict.h< / a > >
const bool no_writing = FALSE;
< a name = "f338" > < / a > Canvas::Canvas( < a href = "tqwidget.html" > TQWidget< / a > *parent, const char *name )
: < a href = "tqwidget.html" > TQWidget< / a > ( parent, name, WStaticContents ), pen( TQt::red, 3 ), polyline(3),
mousePressed( FALSE ), buffer( < a href = "tqwidget.html#width" > width< / a > (), height() )
{
< a name = "x907" > < / a > < a name = "x906" > < / a > if ((tqApp-> < a href = "ntqapplication.html#argc" > argc< / a > () > 0) & & !buffer.load(tqApp-> < a href = "ntqapplication.html#argv" > argv< / a > ()[1]))
buffer.fill( < a href = "tqwidget.html#colorGroup" > colorGroup< / a > ().base() );
< a href = "tqwidget.html#setBackgroundMode" > setBackgroundMode< / a > ( TQWidget::PaletteBase );
#ifndef TQT_NO_CURSOR
< a href = "tqwidget.html#setCursor" > setCursor< / a > ( TQt::crossCursor );
#endif
}
void < a name = "f339" > < / a > Canvas::save( const < a href = "ntqstring.html" > TQString< / a > & filename, const < a href = "ntqstring.html" > TQString< / a > & format )
{
if ( !no_writing )
< a name = "x942" > < / a > buffer.save( filename, format.< a href = "ntqstring.html#upper" > upper< / a > () );
}
void < a name = "f340" > < / a > Canvas::clearScreen()
{
buffer.fill( < a href = "tqwidget.html#colorGroup" > colorGroup< / a > ().base() );
< a href = "tqwidget.html#repaint" > repaint< / a > ( FALSE );
}
< a name = "x949" > < / a > void Canvas::< a href = "tqwidget.html#mousePressEvent" > mousePressEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e )
{
mousePressed = TRUE;
polyline[2] = polyline[1] = polyline[0] = e-> < a href = "qmouseevent.html#pos" > pos< / a > ();
}
< a name = "x950" > < / a > void Canvas::< a href = "tqwidget.html#mouseReleaseEvent" > mouseReleaseEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > * )
{
mousePressed = FALSE;
}
< a name = "x948" > < / a > void Canvas::< a href = "tqwidget.html#mouseMoveEvent" > mouseMoveEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e )
{
if ( mousePressed ) {
< a href = "ntqpainter.html" > TQPainter< / a > painter;
painter.< a href = "ntqpainter.html#begin" > begin< / a > ( & buffer );
painter.< a href = "ntqpainter.html#setPen" > setPen< / a > ( pen );
polyline[2] = polyline[1];
polyline[1] = polyline[0];
polyline[0] = e-> < a href = "qmouseevent.html#pos" > pos< / a > ();
< a name = "x917" > < / a > painter.< a href = "ntqpainter.html#drawPolyline" > drawPolyline< / a > ( polyline );
< a name = "x918" > < / a > painter.< a href = "ntqpainter.html#end" > end< / a > ();
< a href = "ntqrect.html" > TQRect< / a > r = polyline.boundingRect();
< a name = "x928" > < / a > r = r.< a href = "ntqrect.html#normalize" > normalize< / a > ();
< a name = "x931" > < / a > < a name = "x927" > < / a > r.< a href = "ntqrect.html#setLeft" > setLeft< / a > ( r.< a href = "ntqrect.html#left" > left< / a > () - penWidth() );
< a name = "x934" > < / a > < a name = "x933" > < / a > r.< a href = "ntqrect.html#setTop" > setTop< / a > ( r.< a href = "ntqrect.html#top" > top< / a > () - penWidth() );
< a name = "x932" > < / a > < a name = "x929" > < / a > r.< a href = "ntqrect.html#setRight" > setRight< / a > ( r.< a href = "ntqrect.html#right" > right< / a > () + penWidth() );
< a name = "x930" > < / a > < a name = "x925" > < / a > r.< a href = "ntqrect.html#setBottom" > setBottom< / a > ( r.< a href = "ntqrect.html#bottom" > bottom< / a > () + penWidth() );
< a name = "x937" > < / a > < a name = "x936" > < / a > < a name = "x926" > < / a > < a href = "tqimage.html#bitBlt" > bitBlt< / a > ( this, r.< a href = "ntqrect.html#x" > x< / a > (), r.< a href = "ntqrect.html#y" > y< / a > (), & buffer, r.< a href = "ntqrect.html#x" > x< / a > (), r.< a href = "ntqrect.html#y" > y< / a > (), r.< a href = "ntqrect.html#width" > width< / a > (), r.< a href = "ntqrect.html#height" > height< / a > () );
}
}
< a name = "x952" > < / a > void Canvas::< a href = "tqwidget.html#resizeEvent" > resizeEvent< / a > ( < a href = "qresizeevent.html" > TQResizeEvent< / a > *e )
{
TQWidget::< a href = "tqwidget.html#resizeEvent" > resizeEvent< / a > ( e );
int w = < a href = "tqwidget.html#width" > width< / a > () > buffer.width() ?
< a href = "tqwidget.html#width" > width< / a > () : buffer.width();
int h = < a href = "tqwidget.html#height" > height< / a > () > buffer.height() ?
< a href = "tqwidget.html#height" > height< / a > () : buffer.height();
< a href = "ntqpixmap.html" > TQPixmap< / a > tmp( buffer );
buffer.resize( w, h );
buffer.fill( < a href = "tqwidget.html#colorGroup" > colorGroup< / a > ().base() );
< a name = "x922" > < / a > < a name = "x921" > < / a > < a href = "tqimage.html#bitBlt" > bitBlt< / a > ( & buffer, 0, 0, & tmp, 0, 0, tmp.< a href = "ntqpixmap.html#width" > width< / a > (), tmp.< a href = "ntqpixmap.html#height" > height< / a > () );
}
< a name = "x951" > < / a > void Canvas::< a href = "tqwidget.html#paintEvent" > paintEvent< / a > ( < a href = "qpaintevent.html" > TQPaintEvent< / a > *e )
{
TQWidget::< a href = "tqwidget.html#paintEvent" > paintEvent< / a > ( e );
< a name = "x920" > < / a > < a href = "ntqmemarray.html" > TQMemArray< / a > < TQRect> rects = e-> < a href = "qpaintevent.html#region" > region< / a > ().rects();
< a name = "x913" > < / a > for ( uint i = 0; i < rects.< a href = "ntqmemarray.html#count" > count< / a > (); i++ ) {
< a href = "ntqrect.html" > TQRect< / a > r = rects[(int)i];
< a href = "tqimage.html#bitBlt" > bitBlt< / a > ( this, r.< a href = "ntqrect.html#x" > x< / a > (), r.< a href = "ntqrect.html#y" > y< / a > (), & buffer, r.< a href = "ntqrect.html#x" > x< / a > (), r.< a href = "ntqrect.html#y" > y< / a > (), r.< a href = "ntqrect.html#width" > width< / a > (), r.< a href = "ntqrect.html#height" > height< / a > () );
}
}
//------------------------------------------------------
< a name = "f341" > < / a > Scribble::Scribble( < a href = "tqwidget.html" > TQWidget< / a > *parent, const char *name )
: < a href = "ntqmainwindow.html" > TQMainWindow< / a > ( parent, name )
{
canvas = new Canvas( this );
< a href = "ntqmainwindow.html#setCentralWidget" > setCentralWidget< / a > ( canvas );
< a href = "ntqtoolbar.html" > TQToolBar< / a > *tools = new < a href = "ntqtoolbar.html" > TQToolBar< / a > ( this );
bSave = new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( TQPixmap(), "Save", "Save as PNG image", this, TQ_SLOT( slotSave() ), tools );
< a name = "x944" > < / a > bSave-> < a href = "ntqbutton.html#setText" > setText< / a > ( "Save as..." );
< a name = "x943" > < / a > tools-> < a href = "ntqtoolbar.html#addSeparator" > addSeparator< / a > ();
bPColor = new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( TQPixmap(), "Choose Pen Color", "Choose Pen Color", this, TQ_SLOT( slotColor() ), tools );
bPColor-> < a href = "ntqbutton.html#setText" > setText< / a > ( "Choose Pen Color..." );
tools-> < a href = "ntqtoolbar.html#addSeparator" > addSeparator< / a > ();
bPWidth = new < a href = "ntqspinbox.html" > TQSpinBox< / a > ( 1, 20, 1, tools );
< a name = "x945" > < / a > TQToolTip::< a href = "ntqtooltip.html#add" > add< / a > ( bPWidth, "Choose Pen Width" );
< a name = "x939" > < / a > < a href = "tqobject.html#connect" > connect< / a > ( bPWidth, TQ_SIGNAL( < a href = "ntqspinbox.html#valueChanged" > valueChanged< / a > ( int ) ), this, TQ_SLOT( slotWidth( int ) ) );
< a name = "x938" > < / a > bPWidth-> < a href = "ntqspinbox.html#setValue" > setValue< / a > ( 3 );
tools-> < a href = "ntqtoolbar.html#addSeparator" > addSeparator< / a > ();
bClear = new < a href = "ntqtoolbutton.html" > TQToolButton< / a > ( TQPixmap(), "Clear Screen", "Clear Screen", this, TQ_SLOT( slotClear() ), tools );
bClear-> < a href = "ntqbutton.html#setText" > setText< / a > ( "Clear Screen" );
}
void < a name = "f342" > < / a > Scribble::slotSave()
{
< a href = "ntqpopupmenu.html" > TQPopupMenu< / a > *menu = new < a href = "ntqpopupmenu.html" > TQPopupMenu< / a > ( 0 );
< a href = "ntqintdict.html" > TQIntDict< / a > < TQString> formats;
< a name = "x924" > < / a > formats.< a href = "tqptrcollection.html#setAutoDelete" > setAutoDelete< / a > ( TRUE );
for ( unsigned int i = 0; i < TQImageIO::< a href = "tqimageio.html#outputFormats" > outputFormats< / a > ().count(); i++ ) {
< a name = "x911" > < / a > < a href = "ntqstring.html" > TQString< / a > str = TQString( TQImageIO::< a href = "tqimageio.html#outputFormats" > outputFormats< / a > ().at( i ) );
< a name = "x912" > < / a > formats.< a href = "ntqintdict.html#insert" > insert< / a > ( menu-> < a href = "ntqmenudata.html#insertItem" > insertItem< / a > ( TQString( "%1..." ).arg( str ) ), new < a href = "ntqstring.html" > TQString< / a > ( str ) );
}
< a name = "x953" > < / a > menu-> < a href = "tqwidget.html#setMouseTracking" > setMouseTracking< / a > ( TRUE );
< a name = "x947" > < / a > < a name = "x946" > < / a > < a name = "x923" > < / a > int id = menu-> < a href = "ntqpopupmenu.html#exec" > exec< / a > ( bSave-> < a href = "tqwidget.html#mapToGlobal" > mapToGlobal< / a > ( TQPoint( 0, bSave-> < a href = "tqwidget.html#height" > height< / a > () + 1 ) ) );
if ( id != -1 ) {
< a href = "ntqstring.html" > TQString< / a > format = *formats[ id ];
< a name = "x941" > < / a > < a href = "ntqstring.html" > TQString< / a > filename = TQFileDialog::< a href = "ntqfiledialog.html#getSaveFileName" > getSaveFileName< / a > ( < a href = "ntqstring.html#TQString-null" > TQString::null< / a > , TQString( "*.%1" ).arg( format.< a href = "ntqstring.html#lower" > lower< / a > () ), this );
if ( !filename.< a href = "ntqstring.html#isEmpty" > isEmpty< / a > () )
canvas-> save( filename, format );
}
delete menu;
}
void < a name = "f343" > < / a > Scribble::slotColor()
{
< a name = "x909" > < / a > < a href = "ntqcolor.html" > TQColor< / a > c = TQColorDialog::< a href = "ntqcolordialog.html#getColor" > getColor< / a > ( canvas-> penColor(), this );
< a name = "x908" > < / a > if ( c.< a href = "ntqcolor.html#isValid" > isValid< / a > () )
canvas-> setPenColor( c );
}
void < a name = "f344" > < / a > Scribble::slotWidth( int w )
{
canvas-> setPenWidth( w );
}
void < a name = "f345" > < / a > Scribble::slotClear()
{
canvas-> clearScreen();
}
< / pre >
< p > < hr >
< p > Main:
< p > < pre > /****************************************************************************
** $Id: qt/main.cpp 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "scribble.h"
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
int main( int argc, char **argv )
{
< a href = "ntqapplication.html" > TQApplication< / a > a( argc, argv );
Scribble scribble;
scribble.< a href = "tqwidget.html#resize" > resize< / a > ( 500, 350 );
scribble.< a href = "tqwidget.html#setCaption" > setCaption< / a > ("TQt Example - Scribble");
a.< a href = "ntqapplication.html#setMainWidget" > setMainWidget< / a > ( & scribble );
< a name = "x954" > < / a > if ( TQApplication::< a href = "ntqapplication.html#desktop" > desktop< / a > ()-> width() > 550
& & TQApplication::< a href = "ntqapplication.html#desktop" > desktop< / a > ()-> height() > 366 )
scribble.< a href = "tqwidget.html#show" > show< / a > ();
else
< a name = "x960" > < / a > scribble.< a href = "tqwidget.html#showMaximized" > showMaximized< / a > ();
return a.< a href = "ntqapplication.html#exec" > exec< / a > ();
}
< / pre >
< p > See also < a href = "examples.html" > Examples< / a > .
<!-- eof -->
< p > < address > < hr > < div align = center >
< table width = 100% cellspacing = 0 border = 0 > < tr >
< td > Copyright © 2007
< a href = "troll.html" > Trolltech< / a > < td align = center > < a href = "trademarks.html" > Trademarks< / a >
< td align = right > < div align = right > TQt 3.3.8< / div >
< / table > < / div > < / address > < / body >
< / html >