QT:绘图事件QPainter

绘图事件QPainter

绘图事件(需要重写的函数):paintEvent
声明一个画家对象 QPainter painter(this)	指定绘图设备
画线,画圆,画矩形,画文字
可设置画笔,画刷
#include <QPainter>
......
//绘图事件,重写 系统会自动调用
    void paintEvent(QPaintEvent *);

void MainWindow::paintEvent(QPaintEvent *)
{
    //加上头文件
    //实例化画家对象
    QPainter painter(this); //说明是在当前widget下画
    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画圆
    painter.drawEllipse(QPoint(100,100),50,50);
    //画矩形
    painter.drawRect(QRect(20,20,50,50));
    //画文字
    painter.drawText(QRect(10,200,100,50),"举例举例举例举例举例举例");


    //设置画笔颜色    还有很多参数,详细的在QPen中查找
    QPen pen(QColor(255,0,0));
    //让画家 使用画笔
    painter.setPen(pen);
    //画矩形
    painter.drawRect(QRect(150,150,30,30));

    //设置画刷(封闭图形会填充颜色),还有很多类型设置可在QBrush中查找
    QBrush brush(QColor(0,255,0));
    //让画家使用画刷
    painter.setBrush(brush);
    painter.drawRect(QRect(300,300,30,30));

}

在这里插入图片描述

QPainter高级设置

1.抗锯齿,效率低,清晰度提高:
painter.setRenderHint(QPainter::Antialiasing);
2.对画家移动:painter.translate(100,0);
3.保存状态,还原状态
void MainWindow::paintEvent(QPaintEvent *)
{
//绘图高级设置(视频2)
    QPainter painter(this);
    painter.drawEllipse(QPoint(100,50),50,50);
    //设置 抗锯齿的能力 效率低 图形会更清晰
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawEllipse(QPoint(200,50),50,50);

    //画矩形
    painter.drawRect(QRect(200,200,30,30));
    painter.translate(100,0);   //偏移,则会与下一个圆不产生重合重叠,移动画家
    painter.drawRect(QRect(200,200,30,30));
    painter.translate(100,0);
    //还原画家状态
    painter.restore();
    painter.drawRect(QRect(200,200,30,30)); //这个会和第一个重合
}

在这里插入图片描述

手动调用绘图事件

先导入资源图片;
如果需要手动调用绘图事件,利用update
利用画家画图片 painter.drawPixmap()
//绘图事件,重写 系统会自动调用
    void paintEvent(QPaintEvent *);

    int PosX=0;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //点击移动按钮,移动图像
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        //更改图片画图的位置 手动调用绘图事件
        PosX += 20;
        update();	//手动调用绘图事件
    });
}
//绘图事件
void MainWindow::paintEvent(QPaintEvent *)
{
///利用画家画资源图片
    QPainter painter(this);
    //如果超出屏幕,再从0开始
    if(PosX>this->width())
    {
        PosX = 0;
    }

    painter.drawPixmap(PosX,100,QPixmap(":/1.jpg"));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值