QT 在圆的边界画出圆
QT 在圆的边界画出圆
QT 在圆的边界画出实心圆
在Qt中,要实现在圆的边界上绘制图形,你需要使用QPainter
类来在QWidget
或其子类的paintEvent
中绘制。下面我将通过一个简单的例子来说明如何在Qt中绘制一个圆,并在其边界上绘制其他图形(例如,线条或点)。
步骤 1: 创建Qt项目
首先,创建一个新的Qt Widgets Application项目。
步骤 2: 修改主窗口类
打开你的主窗口类(通常是mainwindow.h
和mainwindow.cpp
),并修改paintEvent
方法。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPainter>
#include <QWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
}
MainWindow::~MainWindow()
{
}
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event); // 如果不需要使用事件参数,可以忽略或注释掉这行。
QPainter painter(this); // 使用当前窗口作为绘图设备。
painter.setRenderHint(QPainter::Antialiasing, true); // 启用抗锯齿。
painter.setPen(Qt::blue); // 设置画笔颜色为蓝色。
painter.setBrush(Qt::NoBrush); // 不填充圆内部。
int radius = 100; // 圆的半径。
painter.drawEllipse(50, 50, 2 * radius, 2 * radius); // 绘制圆。注意:圆心在(50, 50),半径为radius。
painter.setPen(Qt::red); // 改变画笔颜色为红色。
// 在圆边界上绘制线条或点。例如,我们可以绘制从圆心到圆周上的点。
for (int angle = 0; angle < 360; angle += 30) { // 每30度一个点。
double radian = angle * M_PI / 180; // 将角度转换为弧度。
int x = static_cast<int>(50 + radius * cos(radian)); // 计算x坐标。
int y = static_cast<int>(50 + radius * sin(radian)); // 计算y坐标。
painter.drawPoint(x, y); // 在该点绘制一个点。
}
}
步骤 3: 运行你的程序
编译并运行你的程序。你应该会看到一个窗口中有一个蓝色的圆,其边界上有红色的点,每30度一个点。
说明:
-
QPainter
对象用于在窗口上绘图。你可以设置画笔(setPen
)和刷子(setBrush
)来定义绘图样式。这里我们使用了NoBrush
来仅绘制圆的外轮廓。 -
drawEllipse
方法用于绘制椭圆,通过指定中心点和宽度、高度可以绘制圆(宽度和高度相同)。 -
通过计算每个角度对应的圆周上的点,并在这些点上绘制点,你可以在圆的边界上绘制任何图形。这里的例子是每隔30度画一个点。你可以修改角度的增量来改变点的密度,或者改为绘制线条等。
-
使用
setRenderHint(QPainter::Antialiasing, true)
可以提高绘图的平滑度,使线条和形状看起来更平滑。