88 lines
2.9 KiB
C++

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
#include <QPoint>
#include <QtMath>
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