88 lines
2.9 KiB
C++
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
|