您的位置:首页 > 编程语言 > Qt开发

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));
}

这次学到的东西同时也解决了我上次遇到的绘制警告动画和地图位置不准确的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt