#ifndef WIDGET_H #define WIDGET_H #include namespace Ui { class Widget; } #include #include #include #include #include class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = nullptr); ~Widget(); void paintEvent(QPaintEvent *) override { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔的颜色和样式 painter.setPen(Qt::black); // 获取Widget的尺寸 int width = this->width(); int height = this->height(); // 定义坐标原点的位置 int centerX = width / 2; int centerY = height / 2; // 绘制X轴 painter.drawLine(centerX, 0, centerX, height); // 绘制Y轴 painter.drawLine(0, centerY, width, centerY); // 可选地,绘制网格线 int step = 50; // 网格线之间的间隔 painter.setPen(Qt::lightGray); for (int i = step; i < width; i += step) { painter.drawLine(i, 0, i, height); painter.drawLine(-i + centerX * 2, 0, -i + centerX * 2, height); } for (int i = step; i < height; i += step) { painter.drawLine(0, i, width, i); painter.drawLine(0, -i + centerY * 2, width, -i + centerY * 2); } // 绘制坐标轴上的刻度 painter.setPen(Qt::darkGray); QFontMetrics fm = fontMetrics(); int textWidth = fm.horizontalAdvance(QString::number(step)); int textHeight = fm.height(); for (int i = step; i <= width / 2; i += step) { painter.drawText(QPoint(centerX + i - textWidth / 2, centerY + textHeight), QString::number(i)); painter.drawText(QPoint(centerX - i - textWidth / 2, centerY + textHeight), QString::number(-i)); painter.drawText(QPoint(centerX - textWidth / 2, centerY - i), QString::number(-i)); painter.drawText(QPoint(centerX - textWidth / 2, centerY + i), QString::number(i)); } // 绘制箭头指示坐标方向 painter.setPen(Qt::black); painter.drawLine(centerX - 5, centerY, centerX + 5, centerY); painter.drawLine(centerX, centerY - 5, centerX, centerY + 5); } private: QPoint calculateCenter(QPoint p1, QPoint p2, QPoint p3) { // 这里需要实现计算圆心的逻辑 return QPoint(100, 100); // 假设的圆心位置 } int calculateRadius(QPoint center, QPoint point) { // 计算半径 return qSqrt(qPow(point.x() - center.x(), 2) + qPow(point.y() - center.y(), 2)); } private: Ui::Widget *ui; }; #endif // WIDGET_H