QT练习_图像绘制

QT绘制图像

  • paintEvent()虚函数调用

创建项目的过程不多说
项目结构

//------------main.cpp
main不去动他,项目创建一开始的情况

//------------------mtset.h

#ifndef MYSET_H
#define MYSET_H

#include <QWidget>

namespace Ui {
class myset;
}

class myset : public QWidget
{
    Q_OBJECT

public:
    explicit myset(QWidget *parent = nullptr);
    ~myset();

protected:
    //重写绘图事件,如果窗口绘图,必须在绘图事件里面实现
    //绘图事件,内部自动调用窗口重绘的时候,窗口状态改变

    void paintEvent(QPaintEvent *);


private slots:
    void on_pushButton_clicked();

private:
    Ui::myset *ui;
    int x;
};

#endif // MYSET_H

//-------------------myset.cpp

#include "myset.h"
#include "ui_myset.h"
#include<QPainter>//画板
#include<QPen>//画笔
#include<QBrush>//画刷

myset::myset(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::myset)
{
    ui->setupUi(this);

    x=0;


}

myset::~myset()
{
    delete ui;
}

void myset::paintEvent(QPaintEvent *)//虚函数,继承绘图基类,名字要一模一样,
{
 //   QPainter p(this);
   QPainter p;

   p.begin(this);//指定当前窗口为绘图设备

   QPen pen;
   pen.setWidth(2);
//   pen.setColor(Qt::red);

   pen.setColor(QColor(14,9,234));//蓝色

 //  pen.setStyle(Qt::DashLine);//虚线
   pen.setStyle(Qt::SolidLine);//圆滑曲线

   p.setPen(pen);
//画刷,准备填充
   QBrush brush;
   brush.setColor(Qt::blue);
   brush.setStyle(Qt::Dense1Pattern);

   p.setBrush(brush);
   //画背景图
//   p.drawPixmap(0,0,width(),height(),QPixmap("../image/2.jpg"));指定起点和长宽

//背景图在前,图形和画笔这些在后,不然会被覆盖
   p.drawPixmap(rect(),QPixmap("../image/2.jpg"));//自适应
//画2条直线,首尾坐标
   p.drawLine(50,50,50,100);//(50,50)-->(50,100)
   p.drawLine(50,50,150,50);
//画矩形
   p.drawRect(150,150,20,30);//起点,长宽
//画圆椭圆
   p.drawEllipse(QPoint(70,70),20,20);//圆心,长轴短轴

//画小图形,x变动,从左到右水平移动
   p.drawPixmap(x,200,80,80,QPixmap("../image/3.jpg"));//读取上一个文件目录下image文件中的图像




   p.end();
}

void myset::on_pushButton_clicked()
{
   x+=20;//改变坐标值
   if(x>width())//获取当前窗口宽度
   {
       x=0;
   }
   //刷新窗口
   update();//自动调用paintEvent(QPaintEvent *)
}

//-----------ui界面
添加一个按钮,并转到槽函数:即上述代码中的:void myset::on_pushButton_clicked()

//---------------运行结果
运行结果
按下按钮,佐助移动

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值