Qt中rotate和trabslate的使用
2015-08-27 14:54
513 查看
在Qt图像开发过程中,经常会遇到这样的一些问题,需要对一些图像进行平时和旋转等。
所以经常会用到以下的几个函数:
QTransform & QTransform::rotate(qreal angle, Qt::Axis axis = Qt::ZAxis)
void QPainter::translate(const QPointF & offset)
void QPainterPath::moveTo(const QPointF & point)
都是用来惊醒平移和旋转的函数。
首先是 rotate(45); 表示旋转45度
translate:
在qt中默认的坐标系是以(0,0)点坐标中心点的,所以当你对某个点进行旋转的时候就需要用到translate函数了
translate(100 ,100);表示使用100,100作为中心点,然后在进行旋转的话,就是以100,100做为中心点进行旋转了。
下面就以书上的代码为例子:
QTransform transform;
transform.translate(50, 50); //把中心点移动到 50,50
translate.rotate(45); //旋转45度
translate.translate(-50 ,-50);//把中心点设置回默认的位置
painter.drawText(QPointF(50, 50 ),"draw text in 45 dgree");在50,50点的地方绘制45度的文字
然后就是使用这个的一些细节了。
painter.save();
//上面的绘图代码
painter.restore();
这两句代码的作用就是 先保存painter的状态,在绘制完这段后恢复以前的状态。
下面给出程序的demo
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
// painter.drawText(QPointF(50 , 50),"sdafsdfsd");
// painter.translate(500,500);
// painter.save();
// painter.rotate(50);
// painter.drawLine(0 ,-50 , 0 , -200);
// painter.restore();
// painter.drawLine(0 ,-50 , 0 , -200);
// QVector<QPoint> shipVec;
// shipVec.push_back(QPoint(shipWidth/2,refSpeed));
// shipVec.push_back(QPoint(offsetXY,shipHeight+refSpeed-offsetXY));
// shipVec.push_back(QPoint(shipWidth-offsetXY,shipHeight+refSpeed-offsetXY));
// QPolygon shipPolygon(shipVec);
// shipPainter.drawPolygon(shipPolygon);
QVector<QPointF> shipVec;
shipVec.push_back(QPointF(100+0.0,100+0.0));
shipVec.push_back(QPointF(100+9.0 ,100+ 27.0));
shipVec.push_back(QPointF(100-8.0 ,100+ 27.0));
painter.save();
QTransform trans;
trans.translate(100 ,100);
trans.rotate(45);
trans.translate(-100 ,-100);
painter.setWorldTransform(trans);
// painter.drawPolygon();
painter.drawPolygon(shipVec);
painter.restore();
painter.drawLine(QPointF(100 ,100) , QPointF(150,50));
}
这次学到的东西同时也解决了我上次遇到的绘制警告动画和地图位置不准确的问题
所以经常会用到以下的几个函数:
QTransform & QTransform::rotate(qreal angle, Qt::Axis axis = Qt::ZAxis)
void QPainter::translate(const QPointF & offset)
void QPainterPath::moveTo(const QPointF & point)
都是用来惊醒平移和旋转的函数。
首先是 rotate(45); 表示旋转45度
translate:
在qt中默认的坐标系是以(0,0)点坐标中心点的,所以当你对某个点进行旋转的时候就需要用到translate函数了
translate(100 ,100);表示使用100,100作为中心点,然后在进行旋转的话,就是以100,100做为中心点进行旋转了。
下面就以书上的代码为例子:
QTransform transform;
transform.translate(50, 50); //把中心点移动到 50,50
translate.rotate(45); //旋转45度
translate.translate(-50 ,-50);//把中心点设置回默认的位置
painter.drawText(QPointF(50, 50 ),"draw text in 45 dgree");在50,50点的地方绘制45度的文字
然后就是使用这个的一些细节了。
painter.save();
//上面的绘图代码
painter.restore();
这两句代码的作用就是 先保存painter的状态,在绘制完这段后恢复以前的状态。
下面给出程序的demo
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
// painter.drawText(QPointF(50 , 50),"sdafsdfsd");
// painter.translate(500,500);
// painter.save();
// painter.rotate(50);
// painter.drawLine(0 ,-50 , 0 , -200);
// painter.restore();
// painter.drawLine(0 ,-50 , 0 , -200);
// QVector<QPoint> shipVec;
// shipVec.push_back(QPoint(shipWidth/2,refSpeed));
// shipVec.push_back(QPoint(offsetXY,shipHeight+refSpeed-offsetXY));
// shipVec.push_back(QPoint(shipWidth-offsetXY,shipHeight+refSpeed-offsetXY));
// QPolygon shipPolygon(shipVec);
// shipPainter.drawPolygon(shipPolygon);
QVector<QPointF> shipVec;
shipVec.push_back(QPointF(100+0.0,100+0.0));
shipVec.push_back(QPointF(100+9.0 ,100+ 27.0));
shipVec.push_back(QPointF(100-8.0 ,100+ 27.0));
painter.save();
QTransform trans;
trans.translate(100 ,100);
trans.rotate(45);
trans.translate(-100 ,-100);
painter.setWorldTransform(trans);
// painter.drawPolygon();
painter.drawPolygon(shipVec);
painter.restore();
painter.drawLine(QPointF(100 ,100) , QPointF(150,50));
}
这次学到的东西同时也解决了我上次遇到的绘制警告动画和地图位置不准确的问题
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- 基于PyQt5的快速开发框架QFramer
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)
- qt 学习小节
- QT的命名风格
- QT 中的sleep
- QT 串口的监控
- 在VS2010下配置QT和ITK+VTK