📄 xform-example.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/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"><!--h3.fn,span.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 graphicsarbitrarily.<p> <hr><p> Implementation:<p> <pre>/****************************************************************************** $Id: qt/xform.cpp 3.0.5 edited Oct 12 2001 $**** 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 <<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 transformation matrix (QWMatrix)*/class ShowXForm : public <a href="qwidget.html">QWidget</a>, public ModeNames{ Q_OBJECTpublic: 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="f440"></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="x1427"></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="x1477"></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="x1428"></a> rotLCD-><a href="qlcdnumber.html#display">display</a>( " 0'" );<a name="x1451"></a> rotS-><a href="qrangecontrol.html#setRange">setRange</a>( -180, 180 );<a name="x1462"></a> rotS-><a href="qslider.html#setValue">setValue</a>( 0 );<a name="x1464"></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="x1419"></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="x1468"></a> bg-><a href="qwidget.html#hide">hide</a>();<a name="x1421"></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="x1450"></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="x1420"></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="x1429"></a> textEd-><a href="qlineedit.html#setText">setText</a>( "Troll" );<a name="x1430"></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="x1467"></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="x1431"></a>void XFormControl::<a href="qobject.html#timerEvent">timerEvent</a>(QTimerEvent*){<a name="x1463"></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="f441"></a>XFormControl::newMtx(){ emit newMatrix( matrix() );}void <a name="f442"></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="f443"></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="x1481"></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="x1482"></a> m.<a href="qwmatrix.html#shear">shear</a>( shearVal, shearVal );<a name="x1480"></a> m.<a href="qwmatrix.html#rotate">rotate</a>( rotS-><a href="qslider.html#value">value</a>() );<a name="x1422"></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="x1466"></a> tmp.<a href="qstring.html#sprintf">sprintf</a>( "%1.2f", shearVal ); if ( shearVal >= 0 )<a name="x1465"></a> tmp.<a href="qstring.html#insert">insert</a>( 0, " " );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -