Qt cpp QPainter 在窗口点位 x,y 绘制两个同心圆,中心的同心圆为实心,直径为10px,外围的为空心,直径为20px。外围圆在上下左右加上10px的线段。以x y 为中心 A,水平向右边为0度,角度为n 绘制长度为 nlength的线段AB。在B的位置绘制永远水平的线段B C 长度为50px。
时间: 2024-02-18 17:01:24 浏览: 56
好的,这是一个比较具体的绘图需求,以下是实现代码:
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
int x = 100; // 中心点的x坐标
int y = 100; // 中心点的y坐标
int n = 45; // 角度
int nlength = 30; // 线段长度
QPainter painter(this);
// 绘制实心圆
painter.setBrush(QBrush(Qt::black));
painter.drawEllipse(QPointF(x, y), 5, 5);
// 绘制空心圆
painter.setBrush(Qt::NoBrush);
painter.drawEllipse(QPointF(x, y), 10, 10);
// 绘制外围线段
painter.drawLine(x - 20, y, x - 10, y);
painter.drawLine(x + 20, y, x + 10, y);
painter.drawLine(x, y - 20, x, y - 10);
painter.drawLine(x, y + 20, x, y + 10);
// 绘制线段AB
painter.drawLine(x, y, x + nlength * cos(n * M_PI / 180), y + nlength * sin(n * M_PI / 180));
// 绘制线段BC
painter.drawLine(x + nlength * cos(n * M_PI / 180), y + nlength * sin(n * M_PI / 180), x + nlength * cos(n * M_PI / 180) + 50, y + nlength * sin(n * M_PI / 180));
}
```
其中,cos和sin函数需要用到数学库中的M_PI常量,需要在代码开头添加`#define _USE_MATH_DEFINES`和`#include <math.h>`。
阅读全文