QT的基本图形绘制

1 引用 #include
2 创建绘制对象 QPainter *mQPainter;
3 绘制对象初始化 mQPainter =new QPainter(); //全程使用一个绘图对象(构造)
4 随机种子 qsrand(static_cast(time(nullptr))); //构造里
5 随机数获得 qrand()%n;
6 重写绘制函数 void paintEvent(QPaintEvent *event);
7 void MainWindow::paintEvent(QPaintEvent *event){
//避免未使用警告
Q_UNUSED(event);
//绘制开始
mQPainter->begin(this);
//设置画笔颜色
mQPainter->setPen(QColor(0,160,230));
//创建字体
QFont font;
//微软雅黑
font.setFamily(“Microsofr YaHei”);
//字体大小
font.setPointSize(25);
//斜体
font.setItalic(true);
//粗体
font.setBold(true);
//设置使用字体
mQPainter->setFont(font);
//绘制文本
mQPainter->drawText(50,100,“显示文字内容”);

    //_______________________直线绘制____________________
    //抗锯齿
    mQPainter->setRenderHint(QPainter::Antialiasing,true);
    //设置画笔颜色
    mQPainter->setPen(QColor(0,255,255));
    //QT自定义颜色
    mQpainter->setPen(Qt::red);
     //绘制直线,QPointF点到点,   windth()和height()分别是窗口的宽度和高度
    mQPainter->drawLine(QPointF(0,height()),QPointF(100,100));//width()/2,height()/2));
    
   //_______________________矩形绘制____________________
    //设置画笔颜色,线宽度
    mQPainter->setPen(QPen(QColor(0,160,230),3));
    //设置画刷颜色
    mQPainter->setBrush(QColor(255,160,90));
    //绘制矩形,从起点开始画宽高
    mQPainter->drawRect(100,50,0,50);
    //_______________________弧线(圆弧)绘制____________________
    //矩形 左,上,宽,高
    QRectF rect(50.0,250.0,160.0,90.0);
    //起始角度
    int startAngle=30*16;
    //跨越度数
    int spanAngle=120*16;
    //设置画笔颜色,宽度
     mQPainter->setPen(QPen(QColor(0,160,230),2));
    //绘制弧线
     mQPainter->drawArc(rect,startAngle,spanAngle);
     
     //_______________________椭圆,圆形绘制_______________
     //设置画笔颜色,宽度
      mQPainter->setPen(QPen(QColor(0,160,230),2));
     //设置笔刷的颜色 254,254,254,255白色 254,254,254,0图片底色
      mQPainter->setBrush(QColor(254,254,254,0));
     //绘制椭圆 圆心 x半径 y半径
      mQPainter->drawEllipse(QPoint(100,300),50,20);
     //设置画刷颜色
      mQPainter->setBrush(QColor(255,160,90));
     //绘制圆
      mQPainter->drawEllipse(QPoint(100,400),40,40);
      //_______________________多边形绘制________________
      mQPainter->setPen(QColor(0,160,230));
      mQPainter->setBrush(QColor(255,200,180));
      //各个点的坐标     注:QPoint是点的值是int型,QPointF的值是float型。
      static const QPointF points[4]={QPointF(230,40),QPointF(260,150),QPointF(350,160),QPointF(420,100)};
      //绘制多边形
      mQPainter->drawPolygon(points,4);

     //_______________________点绘制_____________________
      QPoint pt(200,200);
      for(int i=0;i<20;i++){
          for(int j=0;j<20;j++){
              mQPainter->setPen(QColor(qrand()%255,qrand()%255,qrand()%255));
              mQPainter->drawPoint(pt.rx()+j*5,pt.ry()+i*5);
          }
      }

//_________图片绘制
QImage image("./abc.png");
mQPainter->drawImage(300,200,image,0,0,50,50);
mQPainter->drawImage(300,200,image);

    //创建图片对象
    QImage image2;
    //加载图片
    image2.load("./abc.png");
    //显示到屏幕的位置及宽高
    QRect target(100,100,80,80);
    //源图片显示区域
    QRect source(0,0,image2.width(),image2.height());
    //绘制图片  缩放图片
    mQPainter->drawImage(target,image2,source);


    //创建图片对象
    QPixmap pix; //   或定义直接加载QPixmap pix("./abc.png");
    //加载图片
    pix.load("./abc.png");
    //绘制图片   显示位置x,y  显示的宽高
    mQPainter->drawPixmap(0,0,pix.width(),pix.height(),pix);

//注: drawPixmap与drawImage区别
//1)QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的
//2)QPixmap依赖于所在的平台的绘图引擎,故例如反锯齿等一些效果在不同的平台上可能会有不同的显示效果,QImage使用Qt自身的绘图引擎,可在不同平台上具有相同的显示效果
//3)QImage可通过setPixpel()和pixel()等方法直接存取指定的像素

//注: 图片对象.width() .height() 代表图片的宽与高
//注: 绝对路径与相对路径 相对路径: ./ 当前路径 …/上一级目录
//绝对路径: e:\book\目录\text.jpg

//旋转图片
//移动mQPainter的位置,图片的旋转相对点
mQPainter->translate(50,50);
mQPainter->rotate(90);
// mQPainter位置返回
mQPainter->translate(-50,-50);
//绘制图片
//……
//旋转复位
mQPainter->rotate(-90);
//绘制对象复位
mQPainter->resetTransform();
//图片翻转
QImage img;
img.load("./pig1.png");
//水平翻转
img=img.mirrored(true,false);
//垂直翻转
img=img.mirrored(false,true);

    //绘制结束
    mQPainter->end();

}

// id MainWindow::paintEvent(QPaintEvent *event);默认调用一次,使用update(),重复调用
// 可以写 render()函数绘制 OnUpdate()处理逻辑 ,在paingEvent()中调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值