Qt学习-9 <绘图事件 QPainter>

——  均为自学笔记,如有错误请指正


第一节  基础绘图事件

1. 声明
    //绘图事件
    void paintEvent(QPaintEvent *);
2. 定义  <重写绘图事件>
//绘图事件
void Widget::paintEvent(QPaintEvent *)
{

//实例化 画家对象
    QPainter painter(this);  //此处的this指的是在当前窗口画画(绘图设备),而非指定父窗口


//设置画笔    <先设置画笔再画画才有效>
    //设置画笔颜色
    QPen pen(QColor(255,0,0));
    //设置画笔宽度
    pen.setWidth(3);  // 默认值为 1
    //设置画笔风格
    pen.setStyle(Qt::DotLine);
    //让画家使用画笔
    painter.setPen(pen);

//设置画刷
    //设置画刷颜色<填充封闭图形颜色>
    QBrush brush(Qt::cyan);
    //设置画刷风格
    brush.setStyle(Qt::Dense7Pattern);
    //让画家使用画刷
    painter.setBrush(brush);


//开始画画
    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画圆   <椭圆>
    painter.drawEllipse(QPoint(100,100),100,50);
    //画矩形
    painter.drawRect(QRect(20,20,50,50));
    //画文字
    painter.drawText(QRect(10,200,150,50),"好好学习,天天向上");

}
3. 注释说明 

 

  •  注:画笔风格

  •  注:画刷颜色

  •  注:画刷风格

 

 第二节  绘图高级基础设置

1. 声明

<同上>

2. 定义

<位置同上:绘图事件函数中>

void Widget::paintEvent(QPaintEvent *)
{

//声明画家
    QPainter painter(this);

//画圆    
    //画圆 1
    painter.drawEllipse(QPoint(100,50),50,50);
    //画圆 2
    //设置抗锯齿能力  <画的更清晰,但是效率低>
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawEllipse(QPoint(200,50),50,50);

//画矩形  法一
    //画矩形 1 
    painter.drawRect(QRect(20,20,50,50));  //位置1
    //画矩形 2 
    //移动画家  <重置原点坐标>
    painter.translate(100,0);
    painter.drawRect(QRect(20,20,50,50));  //位置2
    //画矩形 3 & 移动画家
    painter.translate(100,0);
    painter.drawRect(QRect(20,20,50,50));  //位置3

//画矩形  法二
    //画矩形 1  
    painter.drawRect(QRect(20,20,50,50));  //位置1
    //移动画家  <重置原点坐标>
    painter.translate(100,0);
    //保存画家状态
    painter.save();
    painter.drawRect(QRect(20,20,50,50));  //位置2
    painter.translate(100,0);
    //还原画家保存状态
    painter.restore();
    painter.drawRect(QRect(20,20,50,50));  //位置2


    
}
3. 结果展示 
  • 画圆 结果

 

  • 画矩形 法一结果

  • 画矩形 法二结果 

 第三节  手动调用绘图事件

注: QLabel 可以画资源图片,Qpainter也可以画资源图片

1.添加资源文件

<略>

2. 代码

注:点击移动按钮 移动图片<应写在构造函数中,而非重置绘图函数中>

  • 声明
// 头文件中声明:

    //图片位置对象
    int posX = 0 ;
  • 定义 
//构造函数中实现:

    //点击移动按钮 移动图片
    connect(ui->pushButton,&QPushButton::clicked,[=](){

     posX += 20 ;

    // 如果超出屏幕 从0开始
    if(posX > this->width())
    {
        posX = 0;
    }


    //调用函数 <手动调用绘图事件用 update更新!!!!重点!!!!!>
    update();



    });




//绘图函数中实现:

    //声明画家
    QPainter painter(this);
    painter.drawPixmap(posX,0,QPixmap(":/Image/Luffy.png"));
3. 注释说明
  • 注:drawPixmap()参数说明

4. 结果展示
  • drawPixmap()添加图片结果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值