QPainter如何实现矩形旋转?

Oskar_Sun 2014-12-28 03:54:59
我要构造一个类似word中画图功能实现画一个矩形可以拖动缩放、旋转
如果通过QTransform旋转坐标系,当矩形中心不在设备坐标中心旋转是不是会出问题?
有没有办法直接旋转矩形,类似rect,rotate这种效果。
还是说用QGraphicsItem更容易实现一点?
...全文
1363 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oskar_Sun 2014-12-28
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:

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


是个思路,不过好像还是不行,原理上还是painter在旋转,矩形的各点坐标旋转前后没变,导致八个小方块没有跟着移动。还有好方法么?

Inhibitory 2014-12-28
  • 打赏
  • 举报
回复

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

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧