QT 在圆的边界画出圆

QT 在圆的边界画出圆

QT 在圆的边界画出实心圆

在Qt中,要实现在圆的边界上绘制图形,你需要使用QPainter类来在QWidget或其子类的paintEvent中绘制。下面我将通过一个简单的例子来说明如何在Qt中绘制一个圆,并在其边界上绘制其他图形(例如,线条或点)。

步骤 1: 创建Qt项目

首先,创建一个新的Qt Widgets Application项目。

步骤 2: 修改主窗口类

打开你的主窗口类(通常是mainwindow.hmainwindow.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)可以提高绘图的平滑度,使线条和形状看起来更平滑。

相关推荐
周圣贤8 分钟前
九尾狐编程语言新算法“超维时空演算体”
开发语言·算法
CaracalTiger1 小时前
HTTP 协议的基本概念(请求/响应流程、状态码、Header、方法)问题解决方案大全
开发语言·网络·python·深度学习·网络协议·http·pip
随缘而动,随遇而安1 小时前
第八十二篇 大数据开发基础:树形数据结构深度解析与实战指南(附创新生活案例)
大数据·开发语言·数据结构
西猫雷婶2 小时前
python学智能算法(十三)|机器学习朴素贝叶斯方法进阶-简单二元分类
开发语言·人工智能·python·深度学习·机器学习·矩阵·分类
武子康2 小时前
Java-49 深入浅出 Tomcat 手写 Tomcat 实现【02】HttpServlet Request RequestProcessor
java·开发语言·后端·学习·spring cloud·tomcat
张朝阳的博客3 小时前
哈夫曼树Python实现
开发语言·python
阑梦清川3 小时前
C#建立与数据库连接(版本问题的解决方案)踩坑总结
开发语言·数据库·c#
药9553 小时前
数据结构 4 (栈和队列)
java·开发语言·数据结构
smileNicky3 小时前
Java实现Excel图片URL筛选与大小检测
java·开发语言·excel
code_li3 小时前
C#实现语音预处理:降噪/静音检测/自动增益
开发语言·c#