diff options
Diffstat (limited to 'doc/html/xform-example.html')
-rw-r--r-- | doc/html/xform-example.html | 559 |
1 files changed, 559 insertions, 0 deletions
diff --git a/doc/html/xform-example.html b/doc/html/xform-example.html new file mode 100644 index 0000000..66910e3 --- /dev/null +++ b/doc/html/xform-example.html @@ -0,0 +1,559 @@ +<!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/xform/xform.doc:4 --> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Transformed Graphics Demo</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>Transformed Graphics Demo</h1> + + +<p> +This example lets the user rotate, shear and scale text and graphics +arbitrarily. +<p> <hr> +<p> Implementation: +<p> <pre>/**************************************************************************** +** $Id: qt/xform.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 Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include <<a href="qapplication-h.html">qapplication.h</a>> + +#include <<a href="qdialog-h.html">qdialog.h</a>> +#include <<a href="qlabel-h.html">qlabel.h</a>> +#include <<a href="qlineedit-h.html">qlineedit.h</a>> +#include <<a href="qpushbutton-h.html">qpushbutton.h</a>> +#include <<a href="qcheckbox-h.html">qcheckbox.h</a>> +#include <<a href="qradiobutton-h.html">qradiobutton.h</a>> +#include <<a href="qbuttongroup-h.html">qbuttongroup.h</a>> +#include <<a href="qlcdnumber-h.html">qlcdnumber.h</a>> +#include <<a href="qslider-h.html">qslider.h</a>> +#include <<a href="qmenubar-h.html">qmenubar.h</a>> +#include <<a href="qfontdialog-h.html">qfontdialog.h</a>> +#include <<a href="qlayout-h.html">qlayout.h</a>> +#include <<a href="qvbox-h.html">qvbox.h</a>> +#include <<a href="qwidgetstack-h.html">qwidgetstack.h</a>> + +#include <<a href="qpainter-h.html">qpainter.h</a>> +#include <<a href="qpixmap-h.html">qpixmap.h</a>> +#include <<a href="qpicture-h.html">qpicture.h</a>> + +#include <stdlib.h> + + +class ModeNames { +public: + enum Mode { Text, Image, Picture }; +}; + + +class XFormControl : public <a href="qvbox.html">QVBox</a>, public ModeNames +{ + <a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a> +public: + XFormControl( const <a href="qfont.html">QFont</a> &initialFont, QWidget *parent=0, const char *name=0 ); + ~XFormControl() {} + + <a href="qwmatrix.html">QWMatrix</a> matrix(); + +signals: + void newMatrix( <a href="qwmatrix.html">QWMatrix</a> ); + void newText( const <a href="qstring.html">QString</a>& ); + void newFont( const <a href="qfont.html">QFont</a> & ); + void newMode( int ); +private slots: + void newMtx(); + void newTxt(const <a href="qstring.html">QString</a>&); + void selectFont(); + void fontSelected( const <a href="qfont.html">QFont</a> & ); + void changeMode(int); + void timerEvent(QTimerEvent*); +private: + Mode mode; + <a href="qslider.html">QSlider</a> *rotS; // Rotation angle scroll bar + <a href="qslider.html">QSlider</a> *shearS; // Shear value scroll bar + <a href="qslider.html">QSlider</a> *magS; // Magnification value scroll bar + <a href="qlcdnumber.html">QLCDNumber</a> *rotLCD; // Rotation angle LCD display + <a href="qlcdnumber.html">QLCDNumber</a> *shearLCD; // Shear value LCD display + <a href="qlcdnumber.html">QLCDNumber</a> *magLCD; // Magnification value LCD display + <a href="qcheckbox.html">QCheckBox</a> *mirror; // Checkbox for mirror image on/of + <a href="qwidgetstack.html">QWidgetStack</a>* optionals; + <a href="qlineedit.html">QLineEdit</a> *textEd; // Inp[ut field for xForm text + <a href="qpushbutton.html">QPushButton</a> *fpb; // Select font push button + <a href="qradiobutton.html">QRadioButton</a> *rb_txt; // Radio button for text + <a href="qradiobutton.html">QRadioButton</a> *rb_img; // Radio button for image + <a href="qradiobutton.html">QRadioButton</a> *rb_pic; // Radio button for picture + <a href="qfont.html">QFont</a> currentFont; +}; + +/* + ShowXForm displays a text or a pixmap (QPixmap) using a coordinate + <a href="qwmatrix.html#TransformationMode">transformation matrix</a> (QWMatrix) +*/ + +class ShowXForm : public <a href="qwidget.html">QWidget</a>, public ModeNames +{ + Q_OBJECT +public: + ShowXForm( const <a href="qfont.html">QFont</a> &f, QWidget *parent=0, const char *name=0 ); + ~ShowXForm() {} + void showIt(); // (Re)displays text or pixmap + + Mode mode() const { return m; } +public slots: + void setText( const <a href="qstring.html">QString</a>& ); + void setMatrix( <a href="qwmatrix.html">QWMatrix</a> ); + void setFont( const <a href="qfont.html">QFont</a> &f ); + void setPixmap( <a href="qpixmap.html">QPixmap</a> ); + void setPicture( const <a href="qpicture.html">QPicture</a>& ); + void setMode( int ); +private: + <a href="qsizepolicy.html">QSizePolicy</a> sizePolicy() const; + <a href="qsize.html">QSize</a> sizeHint() const; + void paintEvent( <a href="qpaintevent.html">QPaintEvent</a> * ); + void resizeEvent( <a href="qresizeevent.html">QResizeEvent</a> * ); + <a href="qwmatrix.html">QWMatrix</a> mtx; // coordinate transform matrix + <a href="qstring.html">QString</a> text; // text to be displayed + <a href="qpixmap.html">QPixmap</a> pix; // pixmap to be displayed + <a href="qpicture.html">QPicture</a> picture; // text to be displayed + <a href="qrect.html">QRect</a> eraseRect; // covers last displayed text/pixmap + Mode m; +}; + +<a name="f397"></a>XFormControl::XFormControl( const <a href="qfont.html">QFont</a> &initialFont, + <a href="qwidget.html">QWidget</a> *parent, const char *name ) + : <a href="qvbox.html">QVBox</a>( parent, name ) +{ + <a href="qhbox.html#setSpacing">setSpacing</a>(6); + <a href="qframe.html#setMargin">setMargin</a>(6); + currentFont = initialFont; + mode = Image; + + rotLCD = new <a href="qlcdnumber.html">QLCDNumber</a>( 4, this, "rotateLCD" ); + rotS = new <a href="qslider.html">QSlider</a>( QSlider::Horizontal, this, + "rotateSlider" ); + shearLCD = new <a href="qlcdnumber.html">QLCDNumber</a>( 5,this, "shearLCD" ); + shearS = new <a href="qslider.html">QSlider</a>( QSlider::Horizontal, this, + "shearSlider" ); + mirror = new <a href="qcheckbox.html">QCheckBox</a>( this, "mirrorCheckBox" ); + rb_txt = new <a href="qradiobutton.html">QRadioButton</a>( this, "text" ); + rb_img = new <a href="qradiobutton.html">QRadioButton</a>( this, "image" ); + rb_pic = new <a href="qradiobutton.html">QRadioButton</a>( this, "picture" ); + optionals = new <a href="qwidgetstack.html">QWidgetStack</a>(this); + <a href="qvbox.html">QVBox</a>* optionals_text = new <a href="qvbox.html">QVBox</a>(optionals); +<a name="x1228"></a> optionals_text-><a href="qhbox.html#setSpacing">setSpacing</a>(6); + <a href="qvbox.html">QVBox</a>* optionals_other = new <a href="qvbox.html">QVBox</a>(optionals); + optionals_other-><a href="qhbox.html#setSpacing">setSpacing</a>(6); +<a name="x1276"></a> optionals-><a href="qwidgetstack.html#addWidget">addWidget</a>(optionals_text,0); + optionals-><a href="qwidgetstack.html#addWidget">addWidget</a>(optionals_other,1); + fpb = new <a href="qpushbutton.html">QPushButton</a>( optionals_text, "text" ); + textEd = new <a href="qlineedit.html">QLineEdit</a>( optionals_text, "text" ); + textEd-><a href="qwidget.html#setFocus">setFocus</a>(); + +<a name="x1229"></a> rotLCD-><a href="qlcdnumber.html#display">display</a>( " 0'" ); + +<a name="x1250"></a> rotS-><a href="qrangecontrol.html#setRange">setRange</a>( -180, 180 ); +<a name="x1261"></a> rotS-><a href="qslider.html#setValue">setValue</a>( 0 ); +<a name="x1263"></a> <a href="qobject.html#connect">connect</a>( rotS, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), SLOT(newMtx()) ); + + shearLCD-><a href="qlcdnumber.html#display">display</a>( "0.00" ); + + shearS-><a href="qrangecontrol.html#setRange">setRange</a>( -25, 25 ); + shearS-><a href="qslider.html#setValue">setValue</a>( 0 ); + <a href="qobject.html#connect">connect</a>( shearS, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), SLOT(newMtx()) ); + +<a name="x1220"></a> mirror-><a href="qbutton.html#setText">setText</a>( <a href="qobject.html#tr">tr</a>("Mirror") ); + <a href="qobject.html#connect">connect</a>( mirror, SIGNAL(<a href="qbutton.html#clicked">clicked</a>()), SLOT(newMtx()) ); + + <a href="qbuttongroup.html">QButtonGroup</a> *bg = new <a href="qbuttongroup.html">QButtonGroup</a>(this); +<a name="x1267"></a> bg-><a href="qwidget.html#hide">hide</a>(); +<a name="x1222"></a> bg-><a href="qbuttongroup.html#insert">insert</a>(rb_txt,0); + bg-><a href="qbuttongroup.html#insert">insert</a>(rb_img,1); + bg-><a href="qbuttongroup.html#insert">insert</a>(rb_pic,2); + rb_txt-><a href="qbutton.html#setText">setText</a>( <a href="qobject.html#tr">tr</a>("Text") ); + rb_img-><a href="qbutton.html#setText">setText</a>( <a href="qobject.html#tr">tr</a>("Image") ); +<a name="x1249"></a> rb_img-><a href="qradiobutton.html#setChecked">setChecked</a>(TRUE); + rb_pic-><a href="qbutton.html#setText">setText</a>( <a href="qobject.html#tr">tr</a>("Picture") ); +<a name="x1221"></a> <a href="qobject.html#connect">connect</a>( bg, SIGNAL(<a href="qbuttongroup.html#clicked">clicked</a>(int)), SLOT(changeMode(int)) ); + + fpb-><a href="qbutton.html#setText">setText</a>( <a href="qobject.html#tr">tr</a>("Select font...") ); + <a href="qobject.html#connect">connect</a>( fpb, SIGNAL(<a href="qbutton.html#clicked">clicked</a>()), SLOT(selectFont()) ); + +<a name="x1230"></a> textEd-><a href="qlineedit.html#setText">setText</a>( "Troll" ); +<a name="x1231"></a> <a href="qobject.html#connect">connect</a>( textEd, SIGNAL(<a href="qlineedit.html#textChanged">textChanged</a>(const <a href="qstring.html">QString</a>&)), + SLOT(newTxt(const <a href="qstring.html">QString</a>&)) ); + + magLCD = new <a href="qlcdnumber.html">QLCDNumber</a>( 4,optionals_other, "magLCD" ); + magLCD-><a href="qlcdnumber.html#display">display</a>( "100" ); + magS = new <a href="qslider.html">QSlider</a>( QSlider::Horizontal, optionals_other, + "magnifySlider" ); + magS-><a href="qrangecontrol.html#setRange">setRange</a>( 0, 800 ); + <a href="qobject.html#connect">connect</a>( magS, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), SLOT(newMtx()) ); + magS-><a href="qslider.html#setValue">setValue</a>( 0 ); + <a href="qobject.html#connect">connect</a>( magS, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), magLCD, SLOT(<a href="qlcdnumber.html#display">display</a>(int))); + +<a name="x1266"></a> optionals_text-><a href="qwidget.html#adjustSize">adjustSize</a>(); + optionals_other-><a href="qwidget.html#adjustSize">adjustSize</a>(); + changeMode(Image); + + <a href="qobject.html#startTimer">startTimer</a>(20); // start an initial animation +} + +<a name="x1232"></a>void XFormControl::<a href="qobject.html#timerEvent">timerEvent</a>(QTimerEvent*) +{ +<a name="x1262"></a> int v = magS-><a href="qslider.html#value">value</a>(); + v = (v+2)+v/10; + if ( v >= 200 ) { + v = 200; + <a href="qobject.html#killTimers">killTimers</a>(); + } + magS-><a href="qslider.html#setValue">setValue</a>(v); +} + + + +/* + Called whenever the user has changed one of the matrix parameters + (i.e. rotate, shear or magnification) +*/ +void <a name="f398"></a>XFormControl::newMtx() +{ + emit newMatrix( matrix() ); +} + +void <a name="f399"></a>XFormControl::newTxt(const <a href="qstring.html">QString</a>& s) +{ + emit newText(s); + changeMode(Text); +} + +/* + Calculates the matrix appropriate for the current controls, + and updates the displays. +*/ +QWMatrix <a name="f400"></a>XFormControl::matrix() +{ + <a href="qwmatrix.html">QWMatrix</a> m; + if (mode != Text) { + double magVal = 1.0*magS-><a href="qslider.html#value">value</a>()/100; +<a name="x1281"></a> m.<a href="qwmatrix.html#scale">scale</a>( magVal, magVal ); + } + double shearVal = 1.0*shearS-><a href="qslider.html#value">value</a>()/25; +<a name="x1282"></a> m.<a href="qwmatrix.html#shear">shear</a>( shearVal, shearVal ); +<a name="x1280"></a> m.<a href="qwmatrix.html#rotate">rotate</a>( rotS-><a href="qslider.html#value">value</a>() ); +<a name="x1223"></a> if ( mirror-><a href="qcheckbox.html#isChecked">isChecked</a>() ) { + m.<a href="qwmatrix.html#scale">scale</a>( 1, -1 ); + m.<a href="qwmatrix.html#rotate">rotate</a>( 180 ); + } + + <a href="qstring.html">QString</a> tmp; +<a name="x1265"></a> tmp.<a href="qstring.html#sprintf">sprintf</a>( "%1.2f", shearVal ); + if ( shearVal >= 0 ) +<a name="x1264"></a> tmp.<a href="qstring.html#insert">insert</a>( 0, " " ); + shearLCD-><a href="qlcdnumber.html#display">display</a>( tmp ); + + int rot = rotS-><a href="qslider.html#value">value</a>(); + if ( rot < 0 ) + rot = rot + 360; + tmp.<a href="qstring.html#sprintf">sprintf</a>( "%3i'", rot ); + rotLCD-><a href="qlcdnumber.html#display">display</a>( tmp ); + return m; +} + + +void <a name="f401"></a>XFormControl::selectFont() +{ + bool ok; +<a name="x1224"></a> <a href="qfont.html">QFont</a> f = QFontDialog::<a href="qfontdialog.html#getFont">getFont</a>( &ok, currentFont ); + if ( ok ) { + currentFont = f; + fontSelected( f ); + } +} + +void <a name="f402"></a>XFormControl::fontSelected( const <a href="qfont.html">QFont</a> &font ) +{ + emit newFont( font ); + changeMode(Text); +} + +/* + Sets the mode - Text, Image, or Picture. +*/ + +void <a name="f403"></a>XFormControl::changeMode(int m) +{ + mode = (Mode)m; + + emit newMode( m ); + newMtx(); + if ( mode == Text ) { +<a name="x1277"></a> optionals-><a href="qwidgetstack.html#raiseWidget">raiseWidget</a>(0); + rb_txt-><a href="qradiobutton.html#setChecked">setChecked</a>(TRUE); + } else { + optionals-><a href="qwidgetstack.html#raiseWidget">raiseWidget</a>(1); + if ( mode == Image ) + rb_img-><a href="qradiobutton.html#setChecked">setChecked</a>(TRUE); + else + rb_pic-><a href="qradiobutton.html#setChecked">setChecked</a>(TRUE); + } +<a name="x1217"></a> qApp-><a href="qapplication.html#flushX">flushX</a>(); +} + +<a name="f388"></a>ShowXForm::ShowXForm( const <a href="qfont.html">QFont</a> &initialFont, + <a href="qwidget.html">QWidget</a> *parent, const char *name ) + : <a href="qwidget.html">QWidget</a>( parent, name, WResizeNoErase ) +{ + <a href="qwidget.html#setFont">setFont</a>( initialFont ); + <a href="qwidget.html#setBackgroundColor">setBackgroundColor</a>( white ); + m = Text; + eraseRect = QRect( 0, 0, 0, 0 ); +} + +<a name="x1275"></a>QSizePolicy ShowXForm::<a href="qwidget.html#sizePolicy">sizePolicy</a>() const +{ + return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); +} + +<a name="x1274"></a>QSize ShowXForm::<a href="qwidget.html#sizeHint">sizeHint</a>() const +{ + return QSize(400,400); +} + +void ShowXForm::<a href="qwidget.html#paintEvent">paintEvent</a>( <a href="qpaintevent.html">QPaintEvent</a> * ) +{ + showIt(); +} + +<a name="x1269"></a>void ShowXForm::<a href="qwidget.html#resizeEvent">resizeEvent</a>( <a href="qresizeevent.html">QResizeEvent</a> * ) +{ + eraseRect = QRect( <a href="qwidget.html#width">width</a>()/2, height()/2, 0, 0 ); + <a href="qwidget.html#repaint">repaint</a>(<a href="qwidget.html#rect">rect</a>()); +} + +void <a name="f389"></a>ShowXForm::setText( const <a href="qstring.html">QString</a>& s ) +{ + text = s; + showIt(); +} + +void <a name="f390"></a>ShowXForm::setMatrix( <a href="qwmatrix.html">QWMatrix</a> w ) +{ + mtx = w; + showIt(); +} + +<a name="x1272"></a>void ShowXForm::<a href="qwidget.html#setFont">setFont</a>( const <a href="qfont.html">QFont</a> &f ) +{ + m = Text; + QWidget::<a href="qwidget.html#setFont">setFont</a>( f ); +} + +void <a name="f391"></a>ShowXForm::setPixmap( <a href="qpixmap.html">QPixmap</a> pm ) +{ + pix = pm; + m = Image; + showIt(); +} + +void <a name="f392"></a>ShowXForm::setPicture( const <a href="qpicture.html">QPicture</a>& p ) +{ + picture = p; + m = Picture; + showIt(); +} + +void <a name="f393"></a>ShowXForm::setMode( int mode ) +{ + m = (Mode)mode; +} + +void <a name="f394"></a>ShowXForm::showIt() +{ + <a href="qpainter.html">QPainter</a> p; + <a href="qrect.html">QRect</a> r; // rectangle covering new text/pixmap in virtual coordinates + <a href="qwmatrix.html">QWMatrix</a> um; // copy user specified transform + int textYPos = 0; // distance from boundingRect y pos to baseline + int textXPos = 0; // distance from boundingRect x pos to text start + <a href="qrect.html">QRect</a> br; + <a href="qfontmetrics.html">QFontMetrics</a> fm( <a href="qwidget.html#fontMetrics">fontMetrics</a>() ); // get widget font metrics + switch ( mode() ) { + case Text: +<a name="x1225"></a> br = fm.<a href="qfontmetrics.html#boundingRect">boundingRect</a>( text ); // rectangle covering text + r = br; + textYPos = -r.<a href="qrect.html#y">y</a>(); + textXPos = -r.<a href="qrect.html#x">x</a>(); +<a name="x1258"></a><a name="x1254"></a><a name="x1251"></a> br.<a href="qrect.html#moveTopLeft">moveTopLeft</a>( QPoint( -br.<a href="qrect.html#width">width</a>()/2, -br.<a href="qrect.html#height">height</a>()/2 ) ); + break; + case Image: +<a name="x1248"></a><a name="x1246"></a> r = QRect(0, 0, pix.<a href="qpixmap.html#width">width</a>()+1, pix.<a href="qpixmap.html#height">height</a>()+1); + break; + case Picture: + // ### need QPicture::boundingRect() + r = QRect(0,0,1000,1000); + break; + } + r.<a href="qrect.html#moveTopLeft">moveTopLeft</a>( QPoint(-r.<a href="qrect.html#width">width</a>()/2, -r.<a href="qrect.html#height">height</a>()/2) ); +<a name="x1253"></a> r.<a href="qrect.html#moveBy">moveBy</a>( -1, -1 ); // add border for matrix round off +<a name="x1255"></a> r.<a href="qrect.html#setSize">setSize</a>( QSize( r.<a href="qrect.html#width">width</a>() + 2,r.<a href="qrect.html#height">height</a>() + 2 ) ); + // compute union of new and old rect + // the resulting rectangle will cover what is already displayed + // and have room for the new text/pixmap +<a name="x1279"></a><a name="x1257"></a> eraseRect = eraseRect.<a href="qrect.html#unite">unite</a>( mtx.<a href="qwmatrix.html#mapRect">mapRect</a>(r) ); + int pw = QMIN(eraseRect.<a href="qrect.html#width">width</a>(),width()); + int ph = QMIN(eraseRect.<a href="qrect.html#height">height</a>(),height()); + <a href="qpixmap.html">QPixmap</a> pm( pw, ph ); // off-screen drawing pixmap +<a name="x1245"></a> pm.<a href="qpixmap.html#fill">fill</a>( <a href="qwidget.html#backgroundColor">backgroundColor</a>() ); + +<a name="x1233"></a> p.<a href="qpainter.html#begin">begin</a>( &pm ); +<a name="x1283"></a> um.<a href="qwmatrix.html#translate">translate</a>( pw/2, ph/2 ); // 0,0 is center + um = mtx * um; +<a name="x1242"></a> p.<a href="qpainter.html#setWorldMatrix">setWorldMatrix</a>( um ); + switch ( mode() ) { + case Text: +<a name="x1240"></a> p.<a href="qpainter.html#setFont">setFont</a>( <a href="qwidget.html#font">font</a>() ); // use widget font +<a name="x1256"></a><a name="x1252"></a> p.<a href="qpainter.html#drawText">drawText</a>( r.<a href="qrect.html#left">left</a>() + textXPos, r.<a href="qrect.html#top">top</a>() + textYPos, text ); +#if 0 + p.<a href="qpainter.html#setPen">setPen</a>( red ); + p.<a href="qpainter.html#drawRect">drawRect</a>( br ); +#endif + break; + case Image: +<a name="x1235"></a> p.<a href="qpainter.html#drawPixmap">drawPixmap</a>( -pix.<a href="qpixmap.html#width">width</a>()/2, -pix.<a href="qpixmap.html#height">height</a>()/2, pix ); + break; + case Picture: + // ### need QPicture::boundingRect() +<a name="x1239"></a> p.<a href="qpainter.html#scale">scale</a>(0.25,0.25); +<a name="x1243"></a> p.<a href="qpainter.html#translate">translate</a>(-230,-180); +<a name="x1234"></a> p.<a href="qpainter.html#drawPicture">drawPicture</a>( picture ); + } +<a name="x1238"></a> p.<a href="qpainter.html#end">end</a>(); + + int xpos = <a href="qwidget.html#width">width</a>()/2 - pw/2; + int ypos = <a href="qwidget.html#height">height</a>()/2 - ph/2; + <a href="qimage.html#bitBlt">bitBlt</a>( this, xpos, ypos, // copy pixmap to widget + &pm, 0, 0, -1, -1 ); +<a name="x1278"></a> eraseRect = mtx.<a href="qwmatrix.html#map">map</a>( r ); +} + + +/* + Grand unifying widget, putting ShowXForm and XFormControl + together. +*/ + +class XFormCenter : public <a href="qhbox.html">QHBox</a>, public ModeNames +{ + Q_OBJECT +public: + XFormCenter( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 ); +public slots: + void setFont( const <a href="qfont.html">QFont</a> &f ) { sx-><a href="qwidget.html#setFont">setFont</a>( f ); } + void newMode( int ); +private: + ShowXForm *sx; + XFormControl *xc; +}; + +void <a name="f395"></a>XFormCenter::newMode( int m ) +{ + static bool first_i = TRUE; + static bool first_p = TRUE; + + if ( sx->mode() == m ) + return; + if ( m == Image && first_i ) { + first_i = FALSE; + <a href="qpixmap.html">QPixmap</a> pm; +<a name="x1247"></a> if ( pm.<a href="qpixmap.html#load">load</a>( "image.any" ) ) + sx->setPixmap( pm ); + return; + } + if ( m == Picture && first_p ) { + first_p = FALSE; + <a href="qpicture.html">QPicture</a> p; +<a name="x1244"></a> if (p.<a href="qpicture.html#load">load</a>( "picture.any" )) + sx->setPicture( p ); + return; + } + sx->setMode(m); +} + +<a name="f396"></a>XFormCenter::XFormCenter( <a href="qwidget.html">QWidget</a> *parent, const char *name ) + : <a href="qhbox.html">QHBox</a>( parent, name ) +{ + <a href="qfont.html">QFont</a> f( "Charter", 36, QFont::Bold ); + + xc = new XFormControl( f, this ); + sx = new ShowXForm( f, this ); + <a href="qhbox.html#setStretchFactor">setStretchFactor</a>(sx,1); + xc-><a href="qframe.html#setFrameStyle">setFrameStyle</a>( QFrame::Panel | QFrame::Raised ); +<a name="x1227"></a> xc-><a href="qframe.html#setLineWidth">setLineWidth</a>( 2 ); + <a href="qobject.html#connect">connect</a>( xc, SIGNAL(newText(const <a href="qstring.html">QString</a>&)), sx, + SLOT(setText(const <a href="qstring.html">QString</a>&)) ); + <a href="qobject.html#connect">connect</a>( xc, SIGNAL(newMatrix(QWMatrix)), + sx, SLOT(setMatrix(QWMatrix)) ); + <a href="qobject.html#connect">connect</a>( xc, SIGNAL(newFont(const <a href="qfont.html">QFont</a>&)), sx, + SLOT(<a href="qwidget.html#setFont">setFont</a>(const <a href="qfont.html">QFont</a>&)) ); + <a href="qobject.html#connect">connect</a>( xc, SIGNAL(newMode(int)), SLOT(newMode(int)) ); + sx->setText( "Troll" ); + newMode( Image ); + sx->setMatrix(xc->matrix()); +} + + +int main( int argc, char **argv ) +{ + <a href="qapplication.html">QApplication</a> a( argc, argv ); + + XFormCenter *xfc = new XFormCenter; + + a.<a href="qapplication.html#setMainWidget">setMainWidget</a>( xfc ); + xfc-><a href="qwidget.html#setCaption">setCaption</a>("Qt Example - XForm"); + xfc-><a href="qwidget.html#show">show</a>(); + return a.<a href="qapplication.html#exec">exec</a>(); +} + +#include "xform.moc" // include metadata generated by the <a href="moc.html#moc">moc</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>Qt 3.3.8</div> +</table></div></address></body> +</html> |