当前位置: 代码迷 >> QT开发 >> QPainter怎么实现矩形旋转
  详细解决方案

QPainter怎么实现矩形旋转

热度:402   发布时间:2016-04-25 03:04:34.0
QPainter如何实现矩形旋转?
我要构造一个类似word中画图功能实现画一个矩形可以拖动缩放、旋转
如果通过QTransform旋转坐标系,当矩形中心不在设备坐标中心旋转是不是会出问题?
有没有办法直接旋转矩形,类似rect,rotate这种效果。
还是说用QGraphicsItem更容易实现一点?
------解决思路----------------------

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

    QRect rect1(100, 100, 100, 100);
    QRect rect2(300, 100, 100, 100);

    painter.drawRect(rect1);
    rotateAndPaintRect(&painter, rect1, 45);

    painter.drawRect(rect2);
    rotateAndPaintRect(&painter, rect2, 15);
    rotateAndPaintRect(&painter, rect2, 30);
    rotateAndPaintRect(&painter, rect2, 45);
    rotateAndPaintRect(&painter, rect2, 60);
    rotateAndPaintRect(&painter, rect2, 75);
}

// 绕矩形的中心旋转矩形
void Widget::rotateAndPaintRect(QPainter *painter, const QRect &rect, int angle) {
    QRect rotatedRect(-rect.width()/2, -rect.height()/2, rect.width(), rect.height());
    int cx = rect.x() + rect.width() / 2;
    int cy = rect.y() + rect.height() / 2;

    painter->save();
    painter->translate(cx, cy);
    painter->rotate(angle);
    painter->drawRect(rotatedRect);
    painter->restore();
}