天天看点

2D绘图笔记三

1)moveTo移动画图的起始位置

2)识记:

path.addEllipse(100,100,50,50);//加入      
painter.setBrush(Qt::yellow);//填充      

3)复制同一图形:

       QPainterPath path2;

       path2.addPath(path);       path2.translate(100,0);       painter.drawPath(path2);

4)显示图片:

void Dialog::paintEvent(QPaintEvent *)      
{      
QPainter painter(this);      
QPixmap pix;      
pix.load("images/linux.jpg");      
painter.drawPixmap(0,0,100,100,pix);      
painter.translate(100,100);      
painter.drawPixmap(0,0,100,100,pix);      
}      

5)

//获得以前图片的宽和高      
qreal width= pix.width();          
qreal height = pix.height();      
//将图片的宽和高扩大两倍,并且在给定的矩形内保持宽高的比值       
pix= pix.scaled(width*2,height*2,Qt::KeepAspectRatio);………………      

其中参数 Qt::KeepAspectRatio,是图片缩放的方式

6)使得图片旋转:

painter.translate(50,50);//让图片的中心作为旋转中心      
painter.rotate(90);//顺时针旋转90度      
painter.translate(-50,-50);//使远点复原      
painter.drawPixmap(0,0,100,100,pix);      

7)图片变换中,几个函数总结:

 1>下载变换:load函数: pix.load("images/linux.jpg");

 2>平移变换:translate函数: painter.translate(50,50);//确定中心

 3>比例变换:scale函数: pix = pix.scaled(width*2,height*2,Qt::keepAspectRatio);

 4>旋转变换:rotate函数:painter.rotate(90);//90度旋转

 5>扭曲变换:shear: painter.shear(0.5,0);//横向扭曲

                                  painter.shear(0,0.5);//纵向扭曲

                                  painter.shear(0.5,0.5);//横纵扭曲

6)画矩形:drawRect(0,0,50,50);(0,0)点画长度为100像素的矩形

7)保存坐标系:painter.save();

   恢复坐标系;  painter.restore();

8)在学习涂鸦时发生调试错误:

    void Dialog::mousePressEvent(QMouseEvent *event);

与.h文件中申明不一致void mousePressEvent(QPaintEvent  *event);其中QMouseEvent与QPaintEvent矛盾;

9)鼠标左键按下:

  void Dialog::mousePressEvent(QMouseEvent *event);

  {

  if(event->button() == Qt::LeftButton)

  lastPoint == event->pos();

   }

  鼠标左键按下同时移动:

  void Dialog::mouseMoveEvent(QMouseEvent *event)

{

  if(event->button()&Qt::LeftButton)

 {

  endPoint = event->pos();

  update();

  }

}

鼠标左键释放: 

void Dialog::mouseReleaseEvent(QMouseEvent *event)

{

   if(event->button() == Qt::LeftButton)

  {

  endPoint = event->pos();

  update();

  }

}