QTransform(图形平移旋转剪切变换)

《Qt实战一二三》 @博主一去丶二三里

https://blog.csdn.net/liang19890820/article/details/51212890

QPainter介绍:

QPainter 一般在部件的绘图事件 paintEvent() 中进行绘制,首先创建 QPainter 对象,然后进行图形的绘制,最后记得销毁 QPainter 对象。当窗口程序需要升级或者重新绘制时,调用此成员函数。使用 repaint()和 update() 后,调用函数 paintEvent()。

error: no 'void MainWindow::paintEvent(QPaintEvent*)' member function declared in class 'MainWindow'
 void MainWindow::paintEvent(QPaintEvent *event)

在mainwindow.h中加上这行
protected:   
 virtual void paintEvent(QPaintEvent *event);

其他不变

//显示  painter.drawPixmap……

// 平移    
transform.translate(120,30); //  将坐标原点由 (0, 0) 变为 (120, 30)
painter.setTransform(transform);

//旋转

   

transform.rotate(45,Qt::XAxis);     transform.rotate(45,Qt::YAxis);

//平移+旋转

transform.translate(120,30);
transform.rotate(45,Qt::ZAxis);

//横纵向剪切变形

transform.shear(0.6,0.3);

总结一下:以后在mainwindow.cpp中写的函数

void xx()

{

}

一定是要在mainwindow.h文件相应类中声明的!

如果需要以图形中心为旋转中心旋转图形,并获取旋转后的图形坐标,可以按照以下步骤进行: 1. 获取图形对象的中心点坐标,可以通过QGraphicsItem的boundingRect()函数获取图形的边界矩形,然后再通过中心点坐标计算公式计算出中心点坐标。 2. 创建一个QTransform对象,并进行旋转变换。需要注意的是,这里的旋转角度应该是相对于中心点的旋转角度。 3. 调用QTransform对象的map()函数,将图形的每个顶点坐标映射到旋转后的坐标系中,得到旋转后的图形坐标。 示例代码如下: ``` QGraphicsItem* item = ...; // 获取图形对象 QRectF boundingRect = item->boundingRect(); // 获取图形的边界矩形 QPointF center = boundingRect.center(); // 计算得到图形的中心点坐标 qreal rotation = ...; // 获取需要旋转的角度 QTransform transform; transform.translate(center.x(), center.y()); // 将中心点移动到坐标原点 transform.rotate(rotation); // 进行旋转变换 transform.translate(-center.x(), -center.y()); // 将中心点移动回原来的位置 QPolygonF polygon = item->mapToScene(item->boundingRect()); // 将图形的顶点坐标映射到场景坐标系中 QVector<QPointF> rotatedPoints; for (int i = 0; i < polygon.size(); ++i) { rotatedPoints.append(transform.map(polygon.at(i))); // 将每个顶点坐标进行旋转变换,并添加到 rotatedPoints 列表中 } // rotatedPoints 中的坐标就是以图形中心为旋转中心旋转后的坐标 ``` 需要注意的是,如果图形还进行了平移或缩放等变换,需要在创建QTransform对象时将这些变换一起考虑进去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值