Технология ООП
Санкт-Петербургский государственный политехнический университет
22 ноября 2011
Технология ООП
События в Qt
В Qt событие — это экземпляр класса QEvent. В Qt редко
приходится использовать события напрямую, т.к. большинство
виджетов сами генерируют сигналы в ответ на любое
существенное событие.
Технология ООП
События в Qt
Технология ООП
События в Qt
Технология ООП
События в Qt
События клавиатуры обрабатываются путем переопределения
функций keyPressEvent() и keyReleaseEvent().
v o i d MyClass : : k e y P r e s s E v e n t ( QKeyEvent ∗ e v e n t )
{
s w i t c h ( e v e n t −>k e y ( ) )
{
case Qt : : Key_Space :
qDebug ( "Space␣ p r e s s e d " ) ;
break ;
...
default :
QWidget : : k e y P r e s s E v e n t ( e v e n t ) ;
}
}
Технология ООП
QEvent
void accept ( )
void i g n o r e ( )
bool i s A c c e p t e d ( ) const
v o i d s e t A c c e p t e d ( bool a c c e p t e d )
bool s p o n t a n e o u s ( ) const
Type t y p e ( ) const
i n t r e g i s t e r E v e n t T y p e ( i n t h i n t = −1 ) [ s t a t i c ]
Технология ООП
QCoreApplication
v o i d p o s t E v e n t ( QObject ∗ r e c e i v e r , QEvent ∗ e v e n t
)
v o i d p r o c e s s E v e n t s ( QEventLoop : : P r o c e s s E v e n t s F l a g s
f l a g s = QEventLoop : : A l l E v e n t s )
v o i d r e m o v e P o s t e d E v e n t s ( QObject ∗ r e c e i v e r )
bool s e n d E v e n t ( QObject ∗ r e c e i v e r , QEvent ∗ e v e n t
)
v o i d s e n d P o s t e d E v e n t s ( QObject ∗ r e c e i v e r , i n t
event_type )
void sendPostedEvents ( )
Технология ООП
Обработчики событий
QObject:
v i r t u a l bool e v e n t ( QEvent ∗ e )
v i r t u a l bool e v e n t F i l t e r ( QObject ∗ watched ,
QEvent ∗ e v e n t )
v o i d i n s t a l l E v e n t F i l t e r ( QObject ∗ f i l t e r O b j )
Технология ООП
Обработчики событий
bool QObject : : e v e n t ( QEvent ∗ e v e n t )
{
s w i t c h ( e−>t y p e ( ) ) {
case QEvent : : Timer :
t i m e r E v e n t ( ( QTimerEvent ∗ ) e ) ;
break ;
case QEvent : : C h i l d A d d e d :
case QEvent : : C h i l d I n s e r t e d :
case QEvent : : ChildRemoved :
c h i l d E v e n t ( ( QChildEvent ∗) e ) ;
break ;
case QEvent : : D e f e r r e d D e l e t e :
delete this ;
break ;
}
return true ;
}
Технология ООП
Обработчики событий
bool QWidget : : e v e n t ( QEvent ∗ e v e n t )
{
s w i t c h ( e−>t y p e ( ) ) {
case QEvent : : K e y P r e s s :
k e y P r e s s E v e n t ( ( QKeyEvent ∗ ) e v e n t ) ;
i f ( ! ( ( QKeyEvent ∗ ) e v e n t )−>i s A c c e p t e d ( ) )
return f a l s e ;
break ;
case QEvent : : K e y R e l e a s e :
k e y R e l e a s e E v e n t ( ( QKeyEvent ∗ ) e v e n t ) ;
i f ( ! ( ( QKeyEvent ∗ ) e v e n t )−>i s A c c e p t e d ( ) )
return f a l s e ;
break ;
...
}
return true ;
}
Технология ООП
События в Qt
Технология ООП
События в Qt
Технология ООП
Установка фильтров событий
v o i d M y L i n e E d i t : : k e y P r e s s E v e n t ( QKeyEvent ∗ e v e n t )
{
i f ( e v e n t −>k e y ( ) == Qt : : Key_Space ) { f o c u s N e x t C h i l d
() ; }
else { QLineEdit : : keyPressEvent ( event ) ; }
}
Технология ООП
Установка фильтров событий
Настройка фильтров событий состоит из следующих этапов:
Регистрация объекта-перехватчика с целевым объектом
посредством вызова функции installEventFilter().
Обработка события в функции eventFilter() перехватчика
Технология ООП
Установка фильтров событий
MyClass : : MyClass ( QWidget ∗ p a r e n t )
{
f i r s t N a m e E d i t −> i n s t a l l E v e n t F i l t e r ( t h i s ) ;
secondNameEdit−> i n s t a l l E v e n t F i l t e r ( t h i s ) ;
c i t y E d i t −> i n s t a l l E v e n t F i l t e r ( t h i s ) ;
}
bool MyClass : : e v e n t F i l t e r ( QObject ∗ t a r g e t , QEvent ∗
event )
{
i f ( t a r g e t == f i r s t N a m e E d i t | | t a r g e t ==
secondNameEdit | | . . . )
{
QKeyEvent ∗ k e y E v e n t = s t a t i c _ c a s t <QKeyEvent∗>( e v e n t
);
i f ( k e y E v e n t −>k e y ( ) == Qt : : Key_Space ) {
focusNextChild () ; return true ; }
}
r e t u r n QWidget : : e v e n t F i l t e r ( t a r g e t , e v e n t ) ;
}
Технология ООП
События в Qt
Технология ООП
Вывод графики
Технология ООП
Вывод графики
Технология ООП
Вывод графики
QPainter может использоваться для вычерчивания на
различных устройствах, таких как QWidget, QPixmap, QImage,
QPrinter и т.п., что позволяет использовать один программный
код для отображения на экран, получения изображения и
печати отчетов.
Технология ООП
QPaintEngine
enum Q P a i n t E n g i n e : : Type
Q P a i n t E n g i n e : : X11
Q P a i n t E n g i n e : : Windows
QPaintEngine : : MacPrinter
QPaintEngine : : CoreGraphics
Q P a i n t E n g i n e : : QuickDraw
Q P a i n t E n g i n e : : QWindowSystem
QPaintEngine : : P o s t S c r i p t
Q P a i n t E n g i n e : : OpenGL
QPaintEngine : : P i c t u r e
Q P a i n t E n g i n e : : SVG
QPaintEngine : : Raster
QPaintEngine : : Direct3D
Q P a i n t E n g i n e : : Pdf
QPaintEngine : : User
Технология ООП
QPaintEngine
v i r t u a l v o i d d r a w E l l i p s e ( const QRect & r e c t )
v i r t u a l v o i d d r a w L i n e s ( const QLine ∗ l i n e s , i n t
lineCount )
v i r t u a l v o i d drawPath ( const Q P a i n t e r P a t h & p a t h )
v i r t u a l v o i d drawImage ( const QRectF & r e c t a n g l e ,
const QImage & image , const QRectF & s r , Qt : :
I m a g e C o n v e r s i o n F l a g s f l a g s = Qt : : A u t o C o l o r )
v i r t u a l v o i d d r a w P o i n t s ( const QPoint ∗ p o i n t s ,
int pointCount )
v i r t u a l v o i d d r a w P o l y g o n ( const QPoint ∗ p o i n t s ,
i n t p o i n t C o u n t , PolygonDrawMode mode )
Технология ООП
QPoint(F)
i n t m a n h a t t a n L e n g t h ( ) const
int ( qreal ) & rx ()
( int | qreal ) & ry ()
void setX ( ( i n t | q r e a l ) x )
void setY ( i n t y )
i n t x ( ) const
i n t y ( ) const
Технология ООП
QLine(F)
v o i d s e t P 1 ( const QPoint & p1 )
v o i d s e t P 2 ( const QPoint & p2 )
v o i d s e t L i n e ( i n t x1 , i n t y1 , i n t x2 , i n t y2 )
v o i d s e t P o i n t s ( const QPoint & p1 , const QPoint &
p2 )
v o i d t r a n s l a t e ( const QPoint & o f f s e t )
QLine t r a n s l a t e d ( const QPoint & o f f s e t ) const
q r e a l a n g l e ( ) const ( F )
q r e a l a n g l e T o ( const QLineF & l i n e ) const ( F )
q r e a l l e n g t h ( ) const ( F )
QLine t o L i n e ( ) const ( F )
Технология ООП
QRect(F)
Технология ООП
QRect(F)
v o i d a d j u s t ( i n t dx1 , i n t dy1 , i n t dx2 , i n t dy2 )
QRect a d j u s t e d ( i n t dx1 , i n t dy1 , i n t dx2 , i n t dy2
) const
bool c o n t a i n s ( const QPoint & p o i n t , bool p r o p e r =
f a l s e ) const
QRect i n t e r s e c t e d ( const QRect & r e c t a n g l e ) const
bool i n t e r s e c t s ( const QRect & r e c t a n g l e ) const
QRect u n i t e d ( const QRect & r e c t a n g l e ) const
Технология ООП
QRect(F)
Технология ООП
QPolygon(F)
QRect u n i t e d ( const QRect & r e c t a n g l e ) const
QRectF b o u n d i n g R e c t ( ) const
bool c o n t a i n s P o i n t ( const QPointF & p o i n t , Qt : :
F i l l R u l e f i l l R u l e ) const
QPolygonF i n t e r s e c t e d ( const QPolygonF & r ) const
bool i s C l o s e d ( ) const
QPolygonF s u b t r a c t e d ( const QPolygonF & r ) const
QPolygon t o P o l y g o n ( ) const ( F )
v o i d t r a n s l a t e ( const QPointF & o f f s e t )
v o i d t r a n s l a t e ( q r e a l dx , q r e a l dy )
QPolygonF u n i t e d ( const QPolygonF & r ) const
Технология ООП
Рендеринг
Технология ООП
QPainter::RenderHint
enum Q P a i n t e r : : R e n d e r H i n t
f l a g s QPainter : : RenderHints
QPainter : : A n t i a l i a s i n g
QPainter : : T e x t A n t i a l i a s i n g
Q P a i n t e r : : SmoothPixmapTransform
QPainter : : H i g h Q u a l i t y A n t i a l i a s i n g
R e n d e r H i n t s r e n d e r H i n t s ( ) const
v o i d s e t R e n d e r H i n t ( R e n d e r H i n t h i n t , bool on =
true )
v o i d s e t R e n d e r H i n t s ( R e n d e r H i n t s h i n t s , bool on =
true )
Технология ООП
QPen
Технология ООП
QPen
Технология ООП
QPen
Технология ООП
QPen
v o i d s e t C o l o r ( const QColor & c o l o r )
v o i d s e t S t y l e ( Qt : : P e n S t y l e s t y l e )
void setWidth ( i n t width )
void setWidthF ( q r e a l width )
Qt : : P e n S t y l e s t y l e ( ) const
i n t w i d t h ( ) const
q r e a l w i d t h F ( ) const
v o i d s e t B r u s h ( const QBrush & b r u s h )
v o i d s e t C a p S t y l e ( Qt : : P e n C a p S t y l e s t y l e )
v o i d s e t J o i n S t y l e ( Qt : : P e n J o i n S t y l e s t y l e )
Технология ООП
QColor
QColor ( i n t r , i n t g , i n t b , i n t a = 255 )
QColor ( QRgb c o l o r )
QColor ( const Q S t r i n g & name )
QColor ( const char ∗ name )
QColor ( const QColor & c o l o r )
QColor ( Qt : : G l o b a l C o l o r c o l o r )
v o i d setCmyk ( i n t c , i n t m, i n t y , i n t k , i n t a =
255 )
v o i d s e t H s v ( i n t h , i n t s , i n t v , i n t a = 255 )
v o i d s e t R g b ( i n t r , i n t g , i n t b , i n t a = 255 )
Технология ООП
QColor
enum
Qt : : G l o b a l C o l o r Qt : : w h i t e
Qt : : b l a c k Qt : : r e d
Qt : : darkRed Qt : : g r e e n
Qt : : d a r k G r e e n Qt : : b l u e
Qt : : d a r k B l u e Qt : : cy an
Qt : : darkCyan Qt : : magenta
Qt : : darkMagenta Qt : : y e l l o w
Qt : : d a r k Y e l l o w Qt : : g r a y
Qt : : d a r k G r a y Qt : : l i g h t G r a y
Технология ООП
QBrush
QBrush ( Qt : : G l o b a l C o l o r c o l o r , Qt : : B r u s h S t y l e
s t y l e = Qt : : S o l i d P a t t e r n )
const QColor & c o l o r ( ) const
const Q G r a d i e n t ∗ g r a d i e n t ( ) const
v o i d s e t C o l o r ( const QColor & c o l o r )
v o i d s e t C o l o r ( Qt : : G l o b a l C o l o r c o l o r )
v o i d s e t S t y l e ( Qt : : B r u s h S t y l e s t y l e )
v o i d s e t T e x t u r e ( const QPixmap & pixmap )
v o i d s e t T e x t u r e I m a g e ( const QImage & image )
Qt : : B r u s h S t y l e s t y l e ( ) const
QPixmap t e x t u r e ( ) const
QImage t e x t u r e I m a g e ( ) const
Технология ООП
QPainter
QPainter ( QPaintDevice ∗ d e v i c e )
bool b e g i n ( Q P a i n t D e v i c e ∗ d e v i c e )
bool end ( )
Q P a i n t E n g i n e ∗ p a i n t E n g i n e ( ) const
Q P a i n t D e v i c e ∗ d e v i c e ( ) const
const QBrush & b a c k g r o u n d ( ) const
Qt : : BGMode backgroundMode ( ) const
const QBrush & b r u s h ( ) const
const QPen & pen ( ) const
v o i d s e t B a c k g r o u n d ( const QBrush & b r u s h )
v o i d setBackgroundMode ( Qt : : BGMode mode )
v o i d s e t B r u s h ( const QBrush & b r u s h )
v o i d s e t B r u s h ( Qt : : B r u s h S t y l e s t y l e )
v o i d s e t P e n ( const QPen & pen )
v o i d s e t P e n ( const QColor & c o l o r )
v o i d s e t P e n ( Qt : : P e n S t y l e s t y l e )
Технология ООП
QPainter
v o i d d r a w P o i n t ( const QPointF & p o s i t i o n )
v o i d d r a w L i n e ( const QLineF & l i n e )
v o i d d r a w L i n e s ( const QLineF ∗ l i n e s , i n t
lineCount )
v o i d drawRect ( const QRectF & r e c t a n g l e )
v o i d d r a w R e c t s ( const QRectF ∗ r e c t a n g l e s , i n t
rectCount )
v o i d f i l l R e c t ( const QRectF & r e c t a n g l e , const
QBrush & b r u s h )
v o i d e r a s e R e c t ( const QRectF & r e c t a n g l e )
Технология ООП
QPainter
Технология ООП
QPainter
Технология ООП
QPainter
Технология ООП
QPainter
v o i d MyWidget : : p a i n t E v e n t ( Q P i n t E v e n t ∗ e v e n t )
{
QPainter p a i n t e r ( t h i s ) ;
p a i n t e r . setRenderHint ( QPainter : : A n t i a l i a s i n g , true )
;
p a i n t e r . s e t P e n ( QPen ( Qt : : b l a c k , 1 2 , Qt : : DashDotLine ,
Qt : : RoundCap ) ) ;
p a i n t e r . s e t B r u s h ( QBrush ( Qt : : g r e e n , Qt : : S o l i d P a t t e r n
));
p a i n t e r . d r a w E l l i p s e (80 , 80 , 400 , 240) ;
QPointF p o i n t s [ 4 ] = { QPointF ( 1 0 . 0 , 8 0 . 0 ) , QPointF
( 2 0 . 0 , 1 0 . 0 ) , QPointF ( 8 0 . 0 , 3 0 . 0 ) , QPointF
(90.0 , 70.0) };
p a i n t e r . drawPolygon ( p o i n t s , 4) ;
QRectF r e c t a n g l e ( 1 0 . 0 , 2 0 . 0 , 8 0 . 0 , 6 0 . 0 ) ;
p a i n t e r . drawRect ( r e c t a n g l e ) ;
p a i n t e r . drawText ( 1 0 0 , 1 0 0 , " H e l l o ␣Qt" ) ;
p a i n t e r . drawImage ( 3 0 0 , 1 0 0 , QImage ( " : / image . png" ) ) ;
p a i n t e r . drawImage ( 8 0 , 8 0 , 4 0 0 , 2 4 0 , 60 ∗ 1 6 , 270 ∗
16) ; Технология ООП