qt利用时间戳上一时刻参数a 当前时刻参数b 有两个数据,10和20 b先取了10;然后画图;然后b取下一个数据20的时候,先把10给a,然后b=20,然后b-a这一段,分成一百份

时间: 2024-03-27 18:37:13 浏览: 21
以下是一个利用Qt绘制时序图的代码示例,其中包括将时间戳转换为日期时间格式、绘制折线图和将折线图分成一百份的操作: ```cpp #include <QDateTime> #include <QPen> #include <QPainter> #include <QVector> #include <QWidget> class TimeSeriesPlot : public QWidget { public: TimeSeriesPlot(QWidget* parent = nullptr) : QWidget(parent) { // 初始化参数a和b a_ = QDateTime::currentMSecsSinceEpoch(); b_ = a_; // 添加数据 data_.append(10); data_.append(20); } protected: void paintEvent(QPaintEvent* event) override { QPainter painter(this); // 设置画笔 QPen pen(Qt::red, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); painter.setPen(pen); // 绘制折线图 int x0 = 50; int y0 = height() - 50; int x1 = width() - 50; int y1 = 50; painter.drawLine(x0, y0, x0, y1); painter.drawLine(x0, y0, x1, y0); int n = data_.size(); if (n > 0) { long long t0 = a_; double y = data_[0]; for (int i = 1; i < n; i++) { long long t1 = b_; double y1 = data_[i]; double dy = (y1 - y) / 100.0; for (int j = 0; j < 100; j++) { long long t = t0 + (t1 - t0) * j / 100; double y2 = y + dy * j; int x = x0 + (x1 - x0) * (t - a_) / (b_ - a_); int y = y0 - (y2 - 10) * (y0 - y1) / (y0 - 10); painter.drawPoint(x, y); } t0 = t1; y = y1; } } } void updateAB(int value) { // 将参数b赋值为当前时间戳 b_ = QDateTime::currentMSecsSinceEpoch(); // 将参数a赋值为上一时刻的b a_ = b_ - value; // 重绘时序图 update(); } private: long long a_; long long b_; QVector<double> data_; }; ``` 在上面的示例代码中,我们定义了一个名为`TimeSeriesPlot`的自定义QWidget类,用于绘制时序图。在类的构造函数中,我们初始化了参数a和b,并添加了两个数据10和20。在类的`paintEvent`函数中,我们首先绘制了坐标轴和网格线,然后根据数据绘制了折线图。在每次更新数据时,我们调用类的`updateAB`函数,并将参数b赋值为当前时间戳,参数a赋值为上一时刻的b。最后,我们调用`update`函数重绘时序图。 使用该自定义QWidget类,我们可以在应用程序中创建一个时序图窗口,并在窗口中绘制时序图。例如,我们可以在主函数中创建一个时序图窗口,然后通过定时器定时添加数据并更新时序图,代码如下: ```cpp #include <QApplication> #include <QTimer> #include "timeseriesplot.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); TimeSeriesPlot plot; plot.show(); QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&]() { double value = qrand() % 100; plot.addData(value); plot.updateAB(1000); }); timer.start(1000); return app.exec(); } ``` 在上面的示例代码中,我们创建了一个名为`timer`的QTimer对象,并使用`connect`函数将定时器的`timeout`信号连接到lambda表达式中。在lambda表达式中,我们首先生成一个随机数作为新的数据,然后添加数据并更新时序图。在每次更新时,我们将参数b更新为当前时间戳,参数a更新为上一时刻的b加上1000毫秒。最后,我们启动定时器,每隔1000毫秒执行一次更新操作。

相关推荐

最新推荐

recommend-type

python获取时间戳的实现示例(10位和13位)

 在python里,在网上介绍的很多方法,得到的时间戳是10位。而java里默认是13位(milliseconds,毫秒级的)。 下面介绍python获得时间戳的方法: 1、10时间戳获取方法: &gt;&gt;&gt; import time &gt;&gt;&gt; t = time.time() &gt;&gt;&gt; ...
recommend-type

Python实现的当前时间多加一天、一小时、一分钟操作示例

主要介绍了Python实现的当前时间多加一天、一小时、一分钟操作,结合实例形式分析了Python基于datetime模块进行日期时间操作相关使用技巧,需要的朋友可以参考下
recommend-type

微信小程序中时间戳和日期的相互转换问题

在微信开发小程序时,后台传入的诗句可能是 时间戳 而不是日期或者需要把日期转换成时间戳来做出相应的处理时我们将用到时间戳和日期的相互转换微信小程序里,时间戳转化为日期格式,支持自定义、拷贝至项目utils/...
recommend-type

详解SpringBoot获得Maven-pom中版本号和编译时间戳

主要介绍了详解SpringBoot获得Maven-pom中版本号和编译时间戳,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

【图像压缩】 GUI矩阵的奇异值分解SVD灰色图像压缩【含Matlab源码 4359期】.zip

Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。