Qt自定义控件-坐标原点位置变化

在Qt中,默认坐标系统以左上角为原点。文章展示了如何使用painter.translate函数将矩形的中心设为新的坐标原点,之后以此绘制直线,从而实现自定义坐标变换。示例代码包括绘制矩形,移动原点到矩形中心并绘制直线的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QPainter偏移原点、旋转、缩放功能Demo【3】 原创 - mahuifa - 博客园

1、qt界面默认绘制坐标是从左上角为原点进行绘制的

如下图所示:

 2、重新设置原点位置

利用painter.translate函数将原点位置控制到指定位置

例如:先绘制一个矩形,然后将矩形的中心点作为原点再画直线

 void paintEvent(QPaintEvent*) override
    {
        QPainter painter(this);

        QRect rect(50, 50, 100, 100);
        //绘制一个矩形
        painter.drawRect(rect);
        //将坐标系的原点设置为矩形的中心
        painter.translate(rect.center());
        // 输出平移后的矩形的坐标
        qDebug() << rect;
        qDebug() << rect.center();

        painter.drawLine(0, 0, 200, 200);
    }

3、save()restore()函数

在绘制复杂图形时,save()restore()函数非常有用。通过保存当前状态,可以在进行一系列变换和设置后恢复到原始状态,避免因多次变换导致绘图错误

painter->save(); // 保存当前状态
transform.translate(m_point.x(), m_point.y()); // 沿着x和y坐标系移动
transform.rotate(-m_realAngle); // 绕轴逆时针旋转
transform.translate(-m_point.x(), -m_point.y()); // 返回原先的移动
painter->setTransform(transform, true); // 合并指定的变换与现在的变换
painter->setPen(pen); // 设置画笔
painter->setBrush(brush); // 设置画刷
painter->drawPolygon(polygon); // 绘制多边形
painter->restore(); // 恢复之前保存的状态

在这个示例中,首先保存QPainter的状态,然后进行一系列变换和设置,最后通过restore()函数恢复QPainter的原始状态‌

4、旋转角度

// 绕矩形的中心旋转矩形
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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值