QT实现自定义旋转矩形(QRotatedRect)

1、QT实现了QPointFQLineF、 QRectF等数据类型,但是就是没有实现旋转矩形的数据类型表示,所以为了方便使用,就自定了旋转矩形QRotatedRect,用来表示带角度方向的矩形。

2、旋转矩形QRotatedRect的成员如下:

float cx:矩形中心X坐标
float cy:矩形中心Y坐标
float w:矩形宽度
float h:矩形高度
float angle:矩形角度

QRotatedRect(float cx = 0, float cy = 0, float w = 0, float h = 0, float angle = 0):无参构造函数
QRotatedRect(const QPointF& center, const QSizeF& size, float angle):有参构造函数

void points(QPointF pts[]) const:返回矩形的四个顶点
QRectF boundingRect() const:返旋转矩形的正矩形boundingRect

QPointF center():返回矩形的中线点
QSizeF size():返回矩形的大小(宽和高)
bool isNull():判断矩形是否为空矩形  
QRotatedRect operator

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,我们可以通过自定义绘制函数和QPainter类中的相关函数实现自定义旋转矩形。 首先,我们需要定义一个包含矩形坐标和角度的数据结构QRotatedRect,可以通过继承QRectF类实现。该类的定义如下: ```c++ class QRotatedRect: public QRectF { public: QRotatedRect() : QRectF(), m_angle(0) {} QRotatedRect(const QRectF& rect, qreal angle = 0) : QRectF(rect), m_angle(angle) {} qreal angle() const { return m_angle; } void setAngle(qreal angle) { m_angle = angle; } private: qreal m_angle; }; ``` 其中,m_angle表示矩形旋转角度。 接下来,我们需要实现自定义绘制函数。首先,我们可以通过旋转、平移和缩放矩阵来将矩形变换到正确的位置和姿态。然后,我们可以使用QPainter的相关函数来绘制矩形。具体代码如下: ```c++ void MyWidget::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.setPen(QPen(Qt::black, 2)); painter.setRenderHint(QPainter::Antialiasing, true); painter.setBrush(Qt::white); QRotatedRect rect(QRectF(100, 100, 100, 50), 30); painter.save(); painter.translate(rect.center()); painter.rotate(rect.angle()); painter.scale(1, rect.height() / rect.width()); painter.drawRect(-rect.width() / 2, -rect.height() / 2, rect.width(), rect.height()); painter.restore(); } ``` 在该代码中,我们首先定义了一个旋转矩形(rect),然后保存当前Painter的状态,将Painter的坐标系移动到矩形中心点,旋转坐标系到正确角度,沿y轴缩放以保持矩形形状不变,绘制矩形,最后恢复Painter的状态。 通过以上方法,我们可以在Qt实现自定义旋转矩形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark-puls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值