qt中 在鼠标的按下的事件设置一条QLineF 并设置起始坐标和结束坐标, 鼠标移动事件也设置一条QLineF设置起始坐标和结束坐标并计算两线段之间夹角
时间: 2024-02-01 22:16:54 浏览: 66
可以通过以下代码实现:
```cpp
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
startPoint = event->pos();
endPoint = startPoint;
}
}
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
endPoint = event->pos();
update();
}
}
void MyWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制当前的线段
painter.drawLine(startPoint, endPoint);
// 计算两条线段的夹角
QPointF v1 = startPoint - endPoint;
QPointF v2 = lastPoint - currentPoint;
qreal angle = acos(QPointF::dotProduct(v1, v2) / (v1.manhattanLength() * v2.manhattanLength())) * 180 / M_PI;
// 绘制夹角
painter.setPen(Qt::red);
painter.drawText(endPoint.x(), endPoint.y(), QString::number(angle));
}
```
其中,`startPoint` 和 `endPoint` 分别表示当前绘制线段的起点和终点,`lastPoint` 和 `currentPoint` 分别表示前一次绘制线段的起点和终点。在 `mousePressEvent` 中记录当前点为起点,`mouseMoveEvent` 中更新终点,并在 `paintEvent` 中绘制当前的线段和计算两条线段的夹角并绘制出来。注意计算夹角时需要使用向量的点积和模长。
阅读全文