《QT实用小工具·二十八》基于qt开发的各种曲线

embedded/2024/9/25 21:26:48/

1、概述
源码放在文章末尾

该项目实现了各种曲线的绘制,下面是项目的demo演示:
在这里插入图片描述
项目部分代码如下:

#include "frmsmoothcurve.h"
#include "ui_frmsmoothcurve.h"
#include "smoothcurve.h"
#include "qpainter.h"
#include "qdatetime.h"
#include "qdebug.h"#define TIMEMS QTime::currentTime().toString("hh:mm:ss zzz")frmSmoothCurve::frmSmoothCurve(QWidget *parent) : QWidget(parent), ui(new Ui::frmSmoothCurve)
{ui->setupUi(this);//初始化随机数种子srand(QDateTime::currentDateTime().toMSecsSinceEpoch());//随机生成曲线上的点int x = -300;while (x < 300) {datas << QPointF(x, rand() % 300 - 100);x += qMin(rand() % 30 + 5, 300);}//正常曲线pathNormal.moveTo(datas.at(0));for (int i = 1; i < datas.size(); ++i) {pathNormal.lineTo(datas.at(i));}//平滑曲线1//qDebug() << TIMEMS << "createSmoothCurve start";pathSmooth1 = SmoothCurve::createSmoothCurve(datas);//qDebug() << TIMEMS << "createSmoothCurve stop";//平滑曲线2//qDebug() << TIMEMS << "createSmoothCurve2 start";pathSmooth2 = SmoothCurve::createSmoothCurve2(datas);//qDebug() << TIMEMS << "createSmoothCurve2 stop";ui->ckShowPoint->setChecked(true);connect(ui->ckShowPoint, SIGNAL(clicked(bool)), this, SLOT(update()));connect(ui->rbtnPathNormal, SIGNAL(clicked(bool)), this, SLOT(update()));connect(ui->rbtnPathSmooth1, SIGNAL(clicked(bool)), this, SLOT(update()));connect(ui->rbtnPathSmooth2, SIGNAL(clicked(bool)), this, SLOT(update()));
}frmSmoothCurve::~frmSmoothCurve()
{delete ui;
}void frmSmoothCurve::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.translate(width() / 2, height() / 2);painter.scale(1, -1);//画坐标轴painter.setPen(QColor(180, 180, 180));painter.drawLine(-250, 0, 250, 0);painter.drawLine(0, 150, 0, -150);//根据选择绘制不同的曲线路径painter.setPen(QPen(QColor(80, 80, 80), 2));if (ui->rbtnPathSmooth1->isChecked()) {painter.drawPath(pathSmooth1);} else if (ui->rbtnPathSmooth2->isChecked()) {painter.drawPath(pathSmooth2);} else {painter.drawPath(pathNormal);}//如果曲线上的点可见则显示出来if (ui->ckShowPoint->isChecked()) {painter.setPen(Qt::black);painter.setBrush(Qt::gray);foreach (QPointF point, datas) {painter.drawEllipse(point, 3, 3);}}
}

源码下载


http://www.ppmy.cn/embedded/5078.html

相关文章

uniapp H5项目 获取接口的二进制流转化成图片url(base64)

如果你使用的是uniapp, 并且你从接口获取下来的数据长这样&#xff1a; 想要把取到的数据展示成图片&#xff0c;那么你可以这样做&#xff1a; // 这是我们的项目封装的请求方法const res await this.$api.getKaptcha({originResponse: true, // 这样写是为了在request那边特…

spring webflux 小结

一、WebFlux 简介 WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架。通过Reactor项目实现Reactive Streams规范&#xff0c;完全异步和非阻塞框架。本身不会加快程序执行速度&#xff0c;但在高并发情况下借助异步IO能够以少量而稳定的线程处理更高的吞吐&…

《魔兽世界》本人收集的二十六个单机版游戏,内有视频架设教程,非常详细,云盘下载

《魔兽世界》&#xff08;World of Warcraft&#xff09;属于大型多人在线角色扮演游戏。 《魔兽世界》本人收集的二十六个单机版游戏&#xff0c;内有视频架设教程&#xff0c;非常详细 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zu7lUNupkPnLPVYHM4jL5…

11篇 Es集群环境安装的步骤

搭建Elasticsearch&#xff08;ES&#xff09;集群环境是一个涉及多个步骤的过程&#xff0c;需要仔细规划和配置。以下是搭建ES集群的一般步骤和要点&#xff1a; 1. **规划集群规模和角色分配**&#xff1a; - 确定集群的规模&#xff0c;包括节点数量和预期的数据量。 …

Python爬虫:urllib库的基本使用

文章目录 一、urllib简介二、请求的发送和响应&#xff08;一&#xff09;发送请求&#xff08;二&#xff09;获取相应内容&#xff08;三&#xff09;下载所需文件 三、URL请求对象的定制四、常见请求方式&#xff08;一&#xff09;get请求方式&#xff08;二&#xff09;po…

设计模式---模板方法模式

一、介绍 所谓模板方法模式&#xff0c;就是提供一种方法的模板来实现一种规范&#xff0c;其他人可以利用这个模板定义自己的逻辑。 在Java编程中的应用&#xff0c;主要就是通过接口或者抽象类来实现的&#xff0c;抽象类中可以把逻辑函数声明为final类型&#xff0c;表示不能…

通快霍廷格TruPlasma RF 7007 – 7020电源使用说明手侧

通快霍廷格TruPlasma RF 7007 – 7020电源使用说明手侧

蓝桥杯刷题-数星星

1265. 数星星 - AcWing题库 /* 题目中的y是递增&#xff0c;不影响 */ /* 直接看作一维数组的更新维护 */ /* 将数据二进制化&#xff0c;拿最低位的1 */ /* 转化为线段树的解法才是核心 */ /* 思想是前缀和 */ #include <bits/stdc.h>using namespace std;const int N …