You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
17 KiB
366 lines
17 KiB
<!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="qwidget-h.html">ntqwidget.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="ntqwidget.html">TQWidget</a>
|
|
{
|
|
<a href="metaobjects.html#TQ_OBJECT">TQ_OBJECT</a>
|
|
|
|
public:
|
|
Canvas( <a href="ntqwidget.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="ntqwidget.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="qimage-h.html">ntqimage.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="ntqwidget.html">TQWidget</a> *parent, const char *name )
|
|
: <a href="ntqwidget.html">TQWidget</a>( parent, name, WStaticContents ), pen( TQt::red, 3 ), polyline(3),
|
|
mousePressed( FALSE ), buffer( <a href="ntqwidget.html#width">width</a>(), height() )
|
|
{
|
|
|
|
<a name="x907"></a><a name="x906"></a> if ((qApp-><a href="ntqapplication.html#argc">argc</a>() > 0) && !buffer.load(qApp-><a href="ntqapplication.html#argv">argv</a>()[1]))
|
|
buffer.fill( <a href="ntqwidget.html#colorGroup">colorGroup</a>().base() );
|
|
<a href="ntqwidget.html#setBackgroundMode">setBackgroundMode</a>( TQWidget::PaletteBase );
|
|
#ifndef QT_NO_CURSOR
|
|
<a href="ntqwidget.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="ntqwidget.html#colorGroup">colorGroup</a>().base() );
|
|
<a href="ntqwidget.html#repaint">repaint</a>( FALSE );
|
|
}
|
|
|
|
<a name="x949"></a>void Canvas::<a href="ntqwidget.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="ntqwidget.html#mouseReleaseEvent">mouseReleaseEvent</a>( <a href="qmouseevent.html">TQMouseEvent</a> * )
|
|
{
|
|
mousePressed = FALSE;
|
|
}
|
|
|
|
<a name="x948"></a>void Canvas::<a href="ntqwidget.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="ntqimage.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="ntqwidget.html#resizeEvent">resizeEvent</a>( <a href="qresizeevent.html">TQResizeEvent</a> *e )
|
|
{
|
|
TQWidget::<a href="ntqwidget.html#resizeEvent">resizeEvent</a>( e );
|
|
|
|
int w = <a href="ntqwidget.html#width">width</a>() > buffer.width() ?
|
|
<a href="ntqwidget.html#width">width</a>() : buffer.width();
|
|
int h = <a href="ntqwidget.html#height">height</a>() > buffer.height() ?
|
|
<a href="ntqwidget.html#height">height</a>() : buffer.height();
|
|
|
|
<a href="ntqpixmap.html">TQPixmap</a> tmp( buffer );
|
|
buffer.resize( w, h );
|
|
buffer.fill( <a href="ntqwidget.html#colorGroup">colorGroup</a>().base() );
|
|
<a name="x922"></a><a name="x921"></a> <a href="ntqimage.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="ntqwidget.html#paintEvent">paintEvent</a>( <a href="qpaintevent.html">TQPaintEvent</a> *e )
|
|
{
|
|
TQWidget::<a href="ntqwidget.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="ntqimage.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="ntqwidget.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, 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, 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="ntqobject.html#connect">connect</a>( bPWidth, SIGNAL( <a href="ntqspinbox.html#valueChanged">valueChanged</a>( int ) ), this, 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, 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="ntqptrcollection.html#setAutoDelete">setAutoDelete</a>( TRUE );
|
|
|
|
for ( unsigned int i = 0; i < TQImageIO::<a href="qimageio.html#outputFormats">outputFormats</a>().count(); i++ ) {
|
|
<a name="x911"></a> <a href="ntqstring.html">TQString</a> str = TQString( TQImageIO::<a href="qimageio.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="ntqwidget.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="ntqwidget.html#mapToGlobal">mapToGlobal</a>( TQPoint( 0, bSave-><a href="ntqwidget.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="ntqwidget.html#resize">resize</a>( 500, 350 );
|
|
scribble.<a href="ntqwidget.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="ntqwidget.html#show">show</a>();
|
|
else
|
|
<a name="x960"></a> scribble.<a href="ntqwidget.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>
|