QTransform(QMatrix)在绘图中指定中心点进行旋转

在图形处理过中,学习前辈的代码时,用到了QMatrix来旋转图形,没有得到想达成的目标。查阅资料得知:QMatrix是QT5以前QTransform的前身,相比QTransform功能一致但要更弱,所以在QT 5的环境下完全可以忽略QMatrix,即使遇到了旧工程用到了QMatrix 也可以将其当作 QTransform 处理。因此两个类可以使用较新的QTransform来处理。这不是重点,重点的是,我想的是指定中心旋转图形,得到的时以屏幕左上角为中心旋转的图形。

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);



       painter.setBrush(QColor(0, 200, 250, 200)); //设置填充颜色
       painter.setPen(QPen(Qt::red,20)); //设置画笔的颜色和宽度。若不设置画笔,则画家会以默认宽度和颜色的画笔来绘制边线
       painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);

       painter.drawLine(QPointF(0,0),QPointF(300,300));//起始辅助线
       QTransform transform;
       //transform.translate(300,300);移动坐标起始点到300,300的位置(起始位0,0)为屏幕左上角
       transform.rotate(10);

       painter.setTransform(transform);
       painter.drawLine(QPointF(0,0),QPointF(300,300));//旋转后的辅助线
        painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);
      // painter.drawPie(QRect(-250, -250, 500, 500), 0, 260 * 16);

}

在这里插入图片描述

上图中从可以明显的看出,图形的旋转是以左上角为圆点旋转的。

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);



       painter.setBrush(QColor(0, 200, 250, 200)); //设置填充颜色
       painter.setPen(QPen(Qt::red,20)); //设置画笔的颜色和宽度。若不设置画笔,则画家会以默认宽度和颜色的画笔来绘制边线
       painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);

       painter.drawLine(QPointF(0,0),QPointF(300,300));//起始辅助线
       QTransform transform;
       transform.translate(300,300);//移动坐标起始点到300,300的位置(起始位0,0)为屏幕左上角
       //transform.rotate(10);

       painter.setPen(QPen(Qt::green,20));
       painter.setTransform(transform);
       painter.drawLine(QPointF(0,0),QPointF(300,300 ));//旋转后的辅助线
       // painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);
       painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);

}

在这里插入图片描述
上图可以看出如果transform.translate(300,300)移动后,坐标系是整体移动到以300,300,为坐标系的起始点

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);



       painter.setBrush(QColor(0, 200, 250, 200)); //设置填充颜色
       painter.setPen(QPen(Qt::red,20)); //设置画笔的颜色和宽度。若不设置画笔,则画家会以默认宽度和颜色的画笔来绘制边线
       painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);

       painter.drawLine(QPointF(0,0),QPointF(300,300));//起始辅助线
       QTransform transform;
       transform.translate(300,300);//移动坐标起始点到300,300的位置(起始位0,0)为屏幕左上角
       transform.rotate(10);

       painter.setPen(QPen(Qt::green,20));
       painter.setTransform(transform);
       painter.drawLine(QPointF(-300,-300),QPointF(0,0 ));//旋转后的辅助线
       // painter.drawPie(QRect(50, 50, 500, 500), 0, 260 * 16);
       painter.drawPie(QRect(-250, -250, 500, 500), 0, 260 * 16);

}

在移动完坐标系之后绘图,只有将图形的坐标系反向移动,并旋转,才能到达,以饼型的中心为远点进行旋转的效果在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值