2010年11月1日 星期一

Qt: QRegion Class 圖形交疊的四種取出作法

Creating and Using Regions

當在Qt使用QPainter繪圖時,常常會遇到所需繪出圖形並非單純的長方形(Rectangle)或多邊形(polygon),可能是多種圖形的交錯合體情況,以下說明當圖形重疊時,可取得相交區域的四種情形。

General Usage:
void MyWidget::paintEvent(QPaintEvent *)
{
    QRegion r1(QRect(100, 100, 200, 80), QRegion::Ellipse);
    // r1: elliptic region
    QRegion r2(QRect(100, 120, 90, 30));    // r2: rectangular region
    QRegion r3 = r1.intersected(r2);        // r3: intersection
    QPainter painter(this);
    painter.setClipRegion(r3);
    ...                                     // paint clipped graphics
    painter.drawrect(QRect(100, 100, 200, 80));
}

  1. 交集-僅取出兩者相疊區域(intersected):
    • QRegion QRegion::intersected ( const QRegion & r ) const
    • 圖例:
  2. 僅取出前者未與後者重疊區域(subtracted):
    • QRegion QRegion::subtracted ( const QRegion & r ) const
    • 圖例:
  3. 聯集-合併取出兩者所有區域(united):
    • QRegion QRegion::united ( const QRegion & r ) const
    • 圖例:
  4. 取出兩者不重疊的區域(xored):
    • QRegion QRegion::xored ( const QRegion & r ) const
    • 圖例:



更詳細資料請參考:Qt4.6 QRegion Class Reference