在图形处理过中,学习前辈的代码时,用到了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);
}
在移动完坐标系之后绘图,只有将图形的坐标系反向移动,并旋转,才能到达,以饼型的中心为远点进行旋转的效果