Qt画五角星,简单图表

news2024/11/24 20:06:54

五角星:

代码:

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Draw Five-Pointed Star");
    //setFixedSize(300, 300);
    setPalette(Qt::red);
    update();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    //启用抗锯齿渲染,这可以让绘制的图形看起来更加平滑,减少锯齿状的边缘
    painter.setRenderHint(QPainter::Antialiasing);
    //启用文字的抗锯齿渲染,这可以让绘制的文字更加清晰,减少锯齿状的边缘。
    painter.setRenderHint(QPainter::TextAntialiasing);
    qreal R=100;
    const qreal Pi=3.14159;
    //将 72 度这个角度转换成弧度制的值,并存储在 deg 变量中
    qreal deg=Pi*72/180;
    //五角星的中点为原点,QPoint(R,0)是第一个点
    QPoint points[5]={
    QPoint(R,0),
    //根据qCos(deg)和qSin(deg)算出在坐标轴的位置,“-”表示Y轴向下(表示方向)
    QPoint(R*qCos(deg),-R*qSin(deg)),
    QPoint(R*qCos(2*deg),-R*qSin(2*deg)),
    QPoint(R*qCos(3*deg),-R*qSin(3*deg)),
    QPoint(R*qCos(4*deg),-R*qSin(4*deg))
    };

    //设置字体
    QFont font;
    font.setPointSize(14);
    painter.setFont(font);

    //设置画笔
    QPen penLine;
    //设置画笔的线宽为 2 个像素。
    penLine.setWidth(2);
    //设置画笔的颜色为蓝色。
    penLine.setColor(Qt::blue);
    //设置画笔的线条样式为实线。
    penLine.setStyle(Qt::SolidLine);
    //设置线条端点的样式为平头,除了平头,还有圆头和方头等样式可选。
    penLine.setCapStyle(Qt::FlatCap);
    painter.setPen(penLine);

    //设置画刷
    QBrush brush;
    brush.setColor(Qt::yellow);
    //设置画刷的填充样式为实心
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);
    //创建了一个 QPainterPath 对象,用于描述五角星的绘制路径
    QPainterPath starPath;
    //将绘制路径的起点移动到 points[0] 这个坐标。
    starPath.moveTo(points[0]);
    //从当前位置(points[0])绘制一条直线到 points[2] 这个坐标。
    starPath.lineTo(points[2]);
    starPath.lineTo(points[4]);
    starPath.lineTo(points[1]);
    starPath.lineTo(points[3]);
    starPath.closeSubpath();
    //在五角星的每个顶点处,添加了一个文字标签。
    starPath.addText(points[0],font,"1");
    starPath.addText(points[1],font,"2");
    starPath.addText(points[2],font,"3");
    starPath.addText(points[3],font,"4");
    starPath.addText(points[4],font,"5");

    //绘制第一个五角星
    painter.save();
    //将坐标系原点移动到 (100, 120) 这个位置。
    painter.translate(100,120);
    //使用之前定义的 starPath 绘制五角星图形。
    painter.drawPath(starPath);
    //在五角星的中心位置(0, 0)绘制文本标签 "s1"。
    painter.drawText(0,0,"s1");
    //恢复 QPainter 对象之前保存的状态,这样就不会影响后续的绘图操作。
    painter.restore();

    //绘制第二个五角星
    painter.translate(300,120);
    //对坐标系进行缩放,缩放比例为 0.8 x 0.8,这样绘制出来的五角星会比之前的小 20%。
    painter.scale(0.8,0.8);
    //对坐标系进行旋转,旋转角度为 90 度。
    painter.rotate(90);
    painter.drawPath(starPath);
    //在第二个五角星的中心位置(0, 0)绘制文本标签 "s2"
    painter.drawText(0,0,"s2");

    //绘制第三个五角星
    //将 QPainter 对象的变换矩阵重置为单位矩阵,这样可以清除之前的位移、缩放和旋转操作,回到初始状态。
    painter.resetTransform();
    painter.translate(500,120);
    painter.rotate(-145);
    painter.drawPath(starPath);
    painter.drawText(0,0,"s3");
    /*在Qt中,当一个事件发生时,比如鼠标点击或键盘输入,Qt会将这些事件传递给相应的窗口部件进行处理。
     * 处理完事件后,窗口部件可以决定是否接受这个事件,或者将其传递给父部件继续处理。
    event->accept(); 这行代码表示当前窗口部件已经处理完该事件,不需要再传递给父部件处理。
    这样可以防止事件被多个部件重复处理,提高程序的处理效率。*/
    event->accept();
}

运行截图:

简单图标表:

widget.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCharts>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QChartView *chartView=new QChartView(this);
    QChart *chart=new QChart();
    chart->setTitle("简单函数曲线");
    chartView->setChart(chart);
    this->setCentralWidget(chartView);
    //序列
    QLineSeries *series0=new QLineSeries();
    QLineSeries *series1=new QLineSeries();
    series0->setName("Sin曲线");
    series1->setName("Cos曲线");
    chart->addSeries(series0);
    chart->addSeries(series1);

    qreal t=0,y1,y2,intv=0.1;
    int cnt=100;
    for (int i = 0; i < cnt; ++i) {
        y1=qSin(t);
        series0->append(t,y1);
        y2=qCos(t);
        series1->append(t,y2);
        t+=intv;

    }
    //创建坐标轴
    QValueAxis *axisX=new QValueAxis();
    axisX->setRange(0,10);
    axisX->setTitleText("时间(秒)");
    QValueAxis *axisY=new QValueAxis();
    axisY->setRange(-2,2);
    axisY->setTitleText("数值");
    //坐标轴添加到图表和序列中
    chart->addAxis(axisX,Qt::AlignBottom);
    chart->addAxis(axisY,Qt::AlignLeft);
    series0->attachAxis(axisX);
    series0->attachAxis(axisY);
    series1->attachAxis(axisX);
    series1->attachAxis(axisY);
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql学习笔记-SQL优化总结

详细内容参见https://blog.csdn.net/qingwufeiyang_530/article/details/139705898?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139705898%22%2C%22source%22%3A%22qingwufeiyang_530%22%7D

Python学习笔记11:入门终结篇

前言 入门知识到这里基本结束了&#xff0c;这里主要讲一下input和range。这两个讲完&#xff0c;讲讲后面进阶学些啥。 range函数 之前将循环的时候讲过一点&#xff0c;这个函数是Python内置的函数&#xff0c;主要用来生成一系列数字&#xff0c;简单方便。 这里重新&…

实践分享:鸿蒙跨平台开发实例

先来理解什么是跨平台 提到跨平台&#xff0c;要先理解什么是“平台”&#xff0c;这里的平台&#xff0c;就是指应用程序的运行环境&#xff0c;例如操作系统&#xff0c;或者是Web浏览器&#xff0c;具体的像HarmonyOS、Android、iOS、或者浏览器&#xff0c;都可以叫做平台…

HTTP协议版本历程

HTTP协议的发展历程 版本推出年份当前状态HTTP/0.91991年已过时HTTP/1.01996年已过时HTTP/1.11997年标准HTTP/2.02015年标准HTTP/3.02022年标准 HTTP/0.9 HTTP/0.9非常简单&#xff0c;并不涉及数据包传输&#xff0c;通过请求和响应的交换达成通信&#xff0c;请求由单行指…

【猫狗分类】Pytorch VGG16 实现猫狗分类5-预测新图片

背景 好了&#xff0c;现在开尝试预测新的图片&#xff0c;并且让vgg16模型判断是狗还是猫吧。 声明&#xff1a;整个数据和代码来自于b站&#xff0c;链接&#xff1a;使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 预测 1、导包 from to…

DataWhale - 吃瓜教程学习笔记(一)

学习视频&#xff1a;第1章-绪论_哔哩哔哩_bilibili 西瓜书对应章节&#xff1a; 第一章 机器学习三观 What&#xff1a;什么是机器学习&#xff1f; 关键词&#xff1a;“学习算法” Why: 为什么要学机器学习&#xff1f; #### 1. 机器学习理论研究#### 2. 机器学习系统开…

.net8 blazor auto模式很爽(五)读取sqlite并显示(2)

在BlazorApp1增加文件夹data&#xff0c;里面增加类dbcont using SharedLibrary.Models; using System.Collections.Generic; using Microsoft.EntityFrameworkCore;namespace BlazorApp1.data {public class dbcont : DbContext{public dbcont(DbContextOptions<dbcont>…

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求&#xff0c;针对这个请求&#xff0c;分别创建一个代表请求的HttpServletRequest对象&#xff0c;代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数&#xff1a;找HttpServletRequest如果要给客户端…

梦想编织者Luna:COZE从童话绘本到乐章的奇妙转化

前言 Coze是什么&#xff1f; Coze扣子是字节跳动发布的一款AI聊天机器人构建平台&#xff0c;能够快速创建、调试和优化AI聊天机器人的应用程序。只要你有想法&#xff0c;无需有编程经验&#xff0c;都可以用扣子快速、低门槛搭建专属于你的 Chatbot&#xff0c;并一键发布…

Web前端项目-交互式3D魔方【附源码】

交互式3D魔方 ​ 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果&#xff0c;并在网页上呈现出逼真的魔方操作体验。 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE html> <html><head><…

独辟蹊径:我是如何用Java自创一套工作流引擎的(上)

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严谨转载。 目录 1. 前言 2. 我为什么要自创一套工作流引擎 3. 表结构设计及关系讲解 3.1. 流程类别business_approval_workflow 3.1.1. 表结构 3.1.2. 表关系说明 3.2. 流程定义business_approval_workflow_de…

Oracle--存储结构

总览 一、逻辑存储结构 二、物理存储结构 1.数据文件 2.控制文件 3.日志文件 4.服务器参数文件 5.密码文件 总览 一、逻辑存储结构 数据块是Oracle逻辑存储结构中的最小的逻辑单位&#xff0c;一个数据库块对应一个或者多个物理块&#xff0c;大小由参数DB_BLOCK_SIZE决…

【详细介绍下PostgreSQL】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

matlab-1-函数图像的绘制

常识 如何建一个新文件 创建新文件&#xff0c;点击新建&#xff0c;我们就可以开始写代码了 为什么要在代码开头加入clear 假如我们有2个文件&#xff0c;第一个文件里面给x赋值100&#xff0c;第二个文件为输出x 依次运行&#xff1a; 结果输出100&#xff0c;这是因为它们…

WPF/C#:异常处理

什么是异常&#xff1f; 在C#中&#xff0c;异常是在程序执行过程中发生的特殊情况&#xff0c;例如尝试除以零、访问不存在的文件、网络连接中断等。这些情况会中断程序的正常流程。 当C#程序中发生这种特殊情况时&#xff0c;会创建一个异常对象并将其抛出。这个异常对象包…

Floyd-Warshall

应用场景 要求出每两点之间的最短路。或判断两点之间的连通性&#xff08;两点之间是否有路径&#xff09;。 板子 代码&#xff08;必背!!!&#xff09; for(int k 1; k < n; k)for(int i 1; i < n; i)for(int j 1; j < n; j)d[i][j] min(d[i][j], d[i][k] …

堆的基本概念

堆 堆是一个完全二叉树 完全二叉树的要求&#xff0c;除了最后一层&#xff0c;其他层的节点个数都是满的&#xff0c;最后一层的节点都靠左排列 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值 堆中每个节点的值都大于等于(或者小于等于)其左右子节点的值…

C#(C Sharp)学习笔记_封装【十八】

什么是封装&#xff1f; 封装是面向对象思维的三大特性之一。封装是将数据和对数据进行操作的函数绑定到一起的机制。它隐藏了对象的内部状态和实现细节&#xff0c;只对外提供必要的接口&#xff0c;从而确保对象内部状态的完整性和安全性。封装的主要目的是增强安全性和简化…

登录MySQL方式

登录MySQL方式 方式一&#xff1a;通过MySQL自带的客户端 MySQL 客户端输入命令即可 方式二&#xff1a;通过window自带的客户端 从命令端&#xff08;cmd&#xff09;进入 mysql -h localhost -P 3306 -u root -p Enter password:密码登录方式&#xff1a; mysql -h 主…

【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 链接&#xff1a; 11-盛最多水的容器 直觉 这个问题可以通过可视化图表来理解和解决。 通过图形化这个…