Qt Toolkit - QRegion Class

| Classes - Annotated - Tree - Functions - Home - Structure

# QRegion Class Reference

The QRegion class specifies a clip region for a painter. More...

`#include <qregion.h>`

List of all member functions.

## Public Members

- enum RegionType { Rectangle, Ellipse }
- QRegion ()
- QRegion ( int x, int y, int w, int h, RegionType = Rectangle )
- QRegion ( const QRect &, RegionType = Rectangle )
- QRegion ( const QPointArray &, bool winding=FALSE )
- QRegion ( const QRegion & )
- QRegion ( const QBitmap & )
- ~QRegion ()
- QRegion& operator= ( const QRegion & )
- bool isNull () const
- bool isEmpty () const
- bool contains ( const QPoint & p ) const
- bool contains ( const QRect & r ) const
- void translate ( int dx, int dy )
- QRegion unite ( const QRegion & ) const
- QRegion intersect ( const QRegion & ) const
- QRegion subtract ( const QRegion & ) const
- QRegion eor ( const QRegion & ) const
- QRect boundingRect () const
- QArray<QRect> rects () const
- void setRects ( const QRect *, int )
- QRegion operator| ( const QRegion & ) const
- QRegion operator+ ( const QRegion & ) const
- QRegion operator& ( const QRegion & ) const
- QRegion operator- ( const QRegion & ) const
- QRegion operator^ ( const QRegion & ) const
- QRegion& operator|= ( const QRegion & )
- QRegion& operator+= ( const QRegion & )
- QRegion& operator&= ( const QRegion & )
- QRegion& operator-= ( const QRegion & )
- QRegion& operator^= ( const QRegion & )
- bool operator== ( const QRegion & ) const
- bool operator!= ( const QRegion & r ) const

## Related Functions

(Note that these are not member functions.)

- QDataStream & operator>> (QDataStream & s, QRegion & r)
- QDataStream & operator<< (QDataStream & s, const QRegion & r)

## Detailed Description

The QRegion class specifies a clip region for a painter.

QRegion is used with QPainter::setClipRegion() to limit the paint area to what needs to be painted. There is also a QWidget::repaint() that takes a QRegion parameter. QRegion is the best tool for reducing flicker.

A region can be created from a rectangle, an ellipse, a polygon or a bitmap. Complex regions may be created by combining simple regions, using unite(), intersect(), subtract() or eor() (exclusive or). Use translate() to move a region.

You can test if a region isNull(), isEmpty() or if it contains() a QPoint or QRect. The bounding rectangle is given by boundingRect().

The function rects() gives a decomposition of the region into rectangles.

Example of using complex regions:

        void MyWidget::paintEvent( QPaintEvent * )
        {
            QPainter p;                             // our painter
            QRegion r1( QRect(100,100,200,80),      // r1 = elliptic region
                        QRegion::Ellipse );
            QRegion r2( QRect(100,120,90,30) );     // r2 = rectangular region
            QRegion r3 = r1.intersect( r2 );        // r3 = intersection
            p.begin( this );                        // start painting widget
            p.setClipRegion( r3 );                  // set clip region
            ...                                     // paint clipped graphics
            p.end();                                // painting done
        }

QRegion is an implicitely shared class.

See also QPainter::setClipRegion() and QPainter::setClipRect().

## Member Type Documentation

### QRegion::RegionType

Determines the shape of the region to be created.

- `Rectangle` - the region covers the entire rectangle
- `Ellipse` - the region is an ellipse inside the rectangle

## Member Function Documentation

### QRegion::QRegion ()

Constructs a null region.

See also isNull().

### QRegion::QRegion ( const QBitmap & bm )

Constructs a region from the bitmap bm.

The resulting region consists of the pixels in bm that are `color1,` as if each pixel was a 1 by 1 rectangle.

This constructor may create complex regions that will slow down painting when used. Note that drawing masked pixmaps can be done much faster using QPixmap::setMask().

### QRegion::QRegion ( const QPointArray & a, bool winding=FALSE )

Constructs a polygon region from the point array a.

If winding is TRUE, the polygon region is filled using the winding algorithm, otherwise the default even-odd fill algorithm is used.

This constructor may create complex regions that will slow down painting when used.

### QRegion::QRegion ( const QRegion & r )

Constructs a new region which is equal to r.

### QRegion::QRegion ( int x, int y, int w, int h, RegionType t = Rectangle )

Constructs a rectangular or elliptic region.

If t is `Rectangle,` the region is the filled rectangle (x, y, w, h). If t is `Ellipse,` the region is the filled ellipse ellipse with center at (x + w / 2, y + h / 2) and size (w ,h ).

### QRegion::QRegion ( const QRect & r, RegionType t = Rectangle )

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

### QRegion::~QRegion ()

Destructs the region.

### QRect QRegion::boundingRect () const

Returns the bounding rectangle of this region. An empty region gives a rectangle that is QRect::isNull().

### bool QRegion::contains ( const QPoint & p ) const

Returns TRUE if the region contains the point p, or FALSE if p is outside the region.

### bool QRegion::contains ( const QRect & r ) const

Returns TRUE if the region overlaps the rectangle r, or FALSE if r is completely outside the region.

### QRegion QRegion::eor ( const QRegion & r ) const

Returns a region which is the exclusive or (XOR) of this region and r.

The figure shows the exclusive or of two elliptical regions.

### QRegion QRegion::intersect ( const QRegion & r ) const

Returns a region which is the intersection of this region and r.

The figure shows the intersection of two elliptical regions.

### bool QRegion::isEmpty () const

Returns TRUE if the region is empty, or FALSE if it is non-empty. An empty region is a region that contains no points.

Example:

        QRegion r1( 10, 10, 20, 20 );
        QRegion r2( 40, 40, 20, 20 );
        QRegion r3;
        r1.isNull();                // FALSE
        r1.isEmpty();               // FALSE
        r3.isNull();                // TRUE
        r3.isEmpty();               // TRUE
        r3 = r1.intersect( r2 );    // r3 = intersection of r1 and r2
        r3.isNull();                // FALSE
        r3.isEmpty();               // TRUE
        r3 = r1.unite( r2 );        // r3 = union of r1 and r2
        r3.isNull();                // FALSE
        r3.isEmpty();               // FALSE

See also isNull().

### bool QRegion::isNull () const

Returns TRUE if the region is a null region, otherwise FALSE.

A null region is a region that has not been initialized. A null region is always empty.

See also isEmpty().

### bool QRegion::operator!= ( const QRegion & r ) const

Returns TRUE if the region is different from r, or FALSE if the regions are equal.

### QRegion QRegion::operator& ( const QRegion & r ) const

`r1&r2` is equivalent to `r1.intersect(r2)`

See also intersect().

### QRegion& QRegion::operator&= ( const QRegion & r )

`r1&=r2` is equivalent to `r1=r1.intersect(r2)`

See also intersect().

### QRegion QRegion::operator+ ( const QRegion & r ) const

`r1+r2` is equivalent to `r1.unite(r2)`

See also unite() and operator|().

### QRegion& QRegion::operator+= ( const QRegion & r )

`r1+=r2` is equivalent to `r1=r1.unite(r2)`

See also intersect().

### QRegion QRegion::operator- ( const QRegion & r ) const

`r1-r2` is equivalent to `r1.subtract(r2)`

See also subtract().

### QRegion& QRegion::operator-= ( const QRegion & r )

`r1-=r2` is equivalent to `r1=r1.subtract(r2)`

See also subtract().

### QRegion & QRegion::operator= ( const QRegion & r )

Assigns r to this region and returns a reference to the region.

### bool QRegion::operator== ( const QRegion & r ) const

Returns TRUE if the region is equal to r, or FALSE if the regions are different.

### QRegion QRegion::operator^ ( const QRegion & r ) const

`r1^r2` is equivalent to `r1.eor(r2)`

See also eor().

### QRegion& QRegion::operator^= ( const QRegion & r )

`r1^=r2` is equivalent to `r1=r1.eor(r2)`

See also eor().

### QRegion QRegion::operator| ( const QRegion & r ) const

`r1|r2` is equivalent to `r1.unite(r2)`

See also unite() and operator+().

### QRegion& QRegion::operator|= ( const QRegion & r )

`r1|=r2` is equivalent to `r1=r1.unite(r2)`

See also unite().

### QArray<QRect> QRegion::rects () const

Returns an array of non-overlapping rectangles that make up the region.

The union of all the rectangles is equal to the original region.

### void QRegion::setRects ( const QRect * rects, int num )

Sets the region to be the given set of rectangles. The rectangles must be optimal Y-X sorted bands as follows:

- The rectangles must not intersect
- All rectangles with a given top coordinate must have the same height.
- No two rectangles may abut horizontally (they should be combined into a single wider rectangle in that case).
- The rectangles must be sorted ascendingly by Y as the major sort key and X as the minor sort key.

### QRegion QRegion::subtract ( const QRegion & r ) const

Returns a region which is r subtracted from this region.

The figure shows the result when the ellipse on the right is subtracted from the ellipse on the left. (`left-right` ).

### void QRegion::translate ( int dx, int dy )

Translates (moves) the region dx along the X axis and dy along the Y axis.

### QRegion QRegion::unite ( const QRegion & r ) const

Returns a region which is the union of this region and r.

The figure shows the union of two elliptical regions.

## Related Functions

### QDataStream & operator>> (QDataStream & s, QRegion & r)

Reads a region from the stream s into r and returns a reference to the stream.

See also Format of the QDataStream operators

### QDataStream & operator<< (QDataStream & s, const QRegion & r)

Writes the region r to the stream s and returns a reference to the stream.

See also Format of the QDataStream operators

Search the documentation, FAQ, qt-interest archive and more (uses www.trolltech.com):

This file is part of the Qt toolkit, copyright © 1995-2000 Trolltech, all rights reserved.