2008年8月25日 星期一

QT - pixmap

有空再寫~

這一個部分我們要說明透過pixmap來避免圖像閃爍。
以下程式碼節錄至QT - chap 10

void CannonField::paintEvent( QPaintEvent *e )
{
  if ( !e->rect().intersects( cannonRect() ) )
    return;

  QRect cr = cannonRect(); // cr為一個方塊,QRect包含(x,y)、長、寬。
  QPixmap pix( cr.size() ); // 建立一個與cr相同大小的pixmap
  pix.fill( this, cr.topLeft() ); // 把pixmap設定放在這一個畫布上,並設定pixmap左上角的位置

  QPainter p( &pix ); // 宣告一個QPainter,其畫圖設備在pix上
  p.setBrush( blue ); // 畫筆是藍色的
  p.setPen( NoPen ); // 圖沒有外框
  p.translate( 0, pix.height() - 1 ); // 轉換座標
  p.drawPie( QRect( -35,-35, 70, 70 ), 0, 90*16 ); // 畫一個扇形
  p.rotate( -ang ); // 以(0,0)點為旋轉點
  p.drawRect( QRect(33, -4, 15, 8) ); // 畫一個矩型
  p.end(); // 畫圖結束,釋放資源

  p.begin( this ); // 把畫布改到this,這裡指的是QWidget
  p.drawPixmap( cr.topLeft(), pix ); // 把剛剛畫好的pixmap畫在this(也就是QWidget)
}


反正,pixmap的精神就是把要畫的圖先畫在pixmap上,最後才把pixmap放到QWidget上。

沒有留言: