048-第三代软件开发-数据回放

头图

第三代软件开发-数据回放

文章目录

  • 第三代软件开发-数据回放
    • 项目介绍
    • 数据回放

关键字: QtQmlDataplay back数据

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

数据回放

额,今天看代码才发现,这部分代码还是Demo阶段,只能看部分了

#include "XXX_dataplayback.h"
#include "ui_XXX_dataplayback.h"XXX_dataPlayBack::XXX_dataPlayBack(QWidget *parent,QString strDBPath) :QWidget(parent),ui(new Ui::XXX_dataPlayBack),m_strDBPath(strDBPath)
{ui->setupUi(this);initUI();getListDBName();
}XXX_dataPlayBack::~XXX_dataPlayBack()
{deleteDBThread();delete ui;
}void XXX_dataPlayBack::slotTimerMove()
{//qDebug() << "slotTimerMove";QTime timer;timer.start();int iIndex = ui->hSlider_move->value();ui->hSlider_move->setValue(iIndex+8*m_iFrequency);int iSKye = XXX_BaseDB::instance()->g_vectorKey.at(0);int iLeft = m_pDraw1->gCustomplot->xAxis->range().lower+8*m_iFrequency;int iDff = iLeft - iSKye;if(iDff > 0){XXX_BaseDB::instance()->m_mutexThread.lock();if(iDff >= XXX_BaseDB::instance()->g_vectorKey.count()){XXX_BaseDB::instance()->g_vectorKey.clear();XXX_BaseDB::instance()->g_vectorTime.clear();XXX_BaseDB::instance()->g_mapTime.clear();XXX_BaseDB::instance()->g_vectorData1.clear();XXX_BaseDB::instance()->g_vectorData2.clear();}else{XXX_BaseDB::instance()->g_vectorKey.remove(0,iDff);XXX_BaseDB::instance()->g_vectorTime.remove(0,iDff);XXX_BaseDB::instance()->g_vectorData1.remove(0,iDff);XXX_BaseDB::instance()->g_vectorData2.remove(0,iDff);}XXX_BaseDB::instance()->m_mutexThread.unlock();}ui->label_RunTime->setText(XXX_BaseDB::instance()->g_mapTime.value(m_pDraw1->gCustomplot->xAxis->range().upper));qDebug() << "XXX_BaseDB::instance()->g_vectorKey" << XXX_BaseDB::instance()->g_vectorKey.count();int iMaxY = quiteMaxData();m_pDraw1->setYHeiget(iMaxY);m_pDraw2->setYHeiget(iMaxY);m_pDraw1->setDataPad(XXX_BaseDB::instance()->g_vectorKey,XXX_BaseDB::instance()->g_vectorData1);m_pDraw2->setDataPad(XXX_BaseDB::instance()->g_vectorKey,XXX_BaseDB::instance()->g_vectorData2);m_pDraw1->slotMovePad(ui->hSlider_move->value(),m_iPlayX);m_pDraw2->slotMovePad(ui->hSlider_move->value(),m_iPlayX);}void XXX_dataPlayBack::slotSliderPressed()
{if(m_timerMove == nullptr)return;m_timerMove->stop();XXX_BaseDB::instance()->stopDBThread(true);XXX_BaseDB::instance()->exitDBThread(false);}void XXX_dataPlayBack::slotSliderReleased()
{if(m_bRunTimer){if(m_timerMove == nullptr)return;if(ui->hSlider_move->value() < m_iPlayX)XXX_BaseDB::instance()->setStartGetID(0,m_iPlayX);elseXXX_BaseDB::instance()->setStartGetID(ui->hSlider_move->value()-m_iPlayX,m_iPlayX);XXX_BaseDB::instance()->exitDBThread(true);XXX_BaseDB::instance()->stopDBThread(false);QThread::msleep(100);m_timerMove->start(m_iFrequency);}else{if(m_timerMove == nullptr)return;if(ui->hSlider_move->value() < m_iPlayX)XXX_BaseDB::instance()->setStartGetID(0,m_iPlayX);elseXXX_BaseDB::instance()->setStartGetID(ui->hSlider_move->value()-m_iPlayX,m_iPlayX);XXX_BaseDB::instance()->exitDBThread(true);XXX_BaseDB::instance()->stopDBThread(false);}}void XXX_dataPlayBack::slotSliderMoved()
{qDebug() << "ui->hSlider_move->value()" << ui->hSlider_move->value();QString strRunTime;XXX_BaseDB::instance()->getFirstTime(ui->hSlider_move->value(),strRunTime);ui->label_RunTime->setText(strRunTime);if(m_timerMove == nullptr)return;QTime timer;timer.start();int iIndex = ui->hSlider_move->value();if(iIndex < m_iPlayX){XXX_BaseDB::instance()->getDataBase(iIndex,iIndex);}else{XXX_BaseDB::instance()->getDataBase(iIndex,m_iPlayX);}int iMaxY = quiteMaxData();m_pDraw1->setYHeiget(iMaxY);m_pDraw1->setDataPad(XXX_BaseDB::instance()->g_vectorOneKey,XXX_BaseDB::instance()->g_vectorOneData1);m_pDraw1->slotMovePad(iIndex,m_iPlayX);m_pDraw2->setYHeiget(iMaxY);m_pDraw2->setDataPad(XXX_BaseDB::instance()->g_vectorOneKey,XXX_BaseDB::instance()->g_vectorOneData2);m_pDraw2->slotMovePad(iIndex,m_iPlayX);qDebug() << "Time elapsed: " << timer.elapsed() << "ms";
}void XXX_dataPlayBack::slotZoomIn()
{ui->pushButton_zoom_out->setVisible(true);if(m_iPlayX>1*8000){m_iPlayX-=8000;}else if(m_iPlayX>1000){m_iPlayX-=1000;}else if(m_iPlayX>100){m_iPlayX-=100;}else{m_iPlayX = 100;}zoomUpdate();
}void XXX_dataPlayBack::slotZoomOut()
{ui->pushButton_zoom_in->setVisible(true);if(m_iPlayX>=20*8000){m_iPlayX = 20*8000;}else if(m_iPlayX>1*8000){m_iPlayX += 1*8000;}else if(m_iPlayX>=1000){m_iPlayX += 1000;}else if(m_iPlayX>=100){m_iPlayX += 100;}else{m_iPlayX = 100;}zoomUpdate();}void XXX_dataPlayBack::zoomUpdate()
{int iIndex = ui->hSlider_move->value();if(iIndex < m_iPlayX){XXX_BaseDB::instance()->getDataBase(iIndex,iIndex);}else{XXX_BaseDB::instance()->getDataBase(iIndex,m_iPlayX);}int iMaxY = quiteMaxData();m_pDraw1->setYHeiget(iMaxY);m_pDraw2->setYHeiget(iMaxY);m_pDraw1->setDataPad(XXX_BaseDB::instance()->g_vectorOneKey,XXX_BaseDB::instance()->g_vectorOneData1);
//    m_pDraw1->slotMovePad(iIndex,m_iPlayX);m_pDraw2->setDataPad(XXX_BaseDB::instance()->g_vectorOneKey,XXX_BaseDB::instance()->g_vectorOneData2);
//    m_pDraw2->slotMovePad(iIndex,m_iPlayX);m_pDraw1->slotMovePad(ui->hSlider_move->value(),m_iPlayX);m_pDraw2->slotMovePad(ui->hSlider_move->value(),m_iPlayX);
}void XXX_dataPlayBack::initUI()
{QColor color1(255,0,0);QColor color2(0,255,0);m_pDraw1 = new XXX_DrawCurve(color1,this);m_pDraw2 = new XXX_DrawCurve(color2,this);QHBoxLayout *hBox1 = new QHBoxLayout(ui->widge_dataPlay_1);QHBoxLayout *hBox2 = new QHBoxLayout(ui->widge_dataPlay_2);hBox1->addWidget(m_pDraw1);hBox2->addWidget(m_pDraw2);//启用长按ui->pushButton_zoom_in->setAutoRepeat(true);//触发长按的时间ui->pushButton_zoom_in->setAutoRepeatDelay(400);//长按时click信号间隔ui->pushButton_zoom_in->setAutoRepeatInterval(50);ui->pushButton_zoom_out->setAutoRepeat(true);ui->pushButton_zoom_out->setAutoRepeatDelay(400);ui->pushButton_zoom_out->setAutoRepeatInterval(50);connect(ui->pushButton_zoom_in,&QPushButton::clicked,this,&XXX_dataPlayBack::slotZoomIn);connect(ui->pushButton_zoom_out,&QPushButton::clicked,this,&XXX_dataPlayBack::slotZoomOut);ui->pushButton_zoom_in->setVisible(false);ui->pushButton_zoom_out->setVisible(false);ui->hSlider_move->setRange(0,m_iPlayX);m_timerMove = new QTimer;m_timerMove->setTimerType(Qt::PreciseTimer);connect(m_timerMove, &QTimer::timeout, this, &XXX_dataPlayBack::slotTimerMove);//connect(ui->hSlider_move, &QSlider::sliderPressed, this, &XXX_dataPlayBack::slotSliderPressed);connect(ui->hSlider_move, &QSlider::sliderReleased, this, &XXX_dataPlayBack::slotSliderReleased);connect(ui->hSlider_move, &QSlider::sliderMoved, this, &XXX_dataPlayBack::slotSliderMoved);
}void XXX_dataPlayBack::getListDBName()
{if(m_strDBPath.isEmpty()){return;}QDirIterator it(m_strDBPath, QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::AllDirs, QDirIterator::Subdirectories);while(it.hasNext()){it.next();if(it.fileInfo().suffix() == "db"){QString strDBName = it.fileName().split(".").at(0);m_listDBName.append(strDBName);}}ui->comboBox_DB->addItems(m_listDBName);
}int XXX_dataPlayBack::quiteMaxData()
{int iSurplus = XXX_BaseDB::instance()->g_vectorData1.count() - ui->hSlider_move->value();if(iSurplus < 0)iSurplus = 0;int iFontSurplus = XXX_BaseDB::instance()->g_vectorData1.count() - m_iPlayX - iSurplus;if(iFontSurplus< 0)iFontSurplus = 0;double dMaxID1 = *std::max_element(std::begin(XXX_BaseDB::instance()->g_vectorData1) + iFontSurplus,std::end(XXX_BaseDB::instance()->g_vectorData1)-iSurplus);double dMaxID2 = *std::min_element(std::begin(XXX_BaseDB::instance()->g_vectorData2),std::end(XXX_BaseDB::instance()->g_vectorData2));
//    double dMinID1 = *std::min_element(std::begin(XXX_BaseDB::instance()->g_vectorData1),std::end(XXX_BaseDB::instance()->g_vectorData1));
//    double dMinID2 = *std::min_element(std::begin(XXX_BaseDB::instance()->g_vectorData2),std::end(XXX_BaseDB::instance()->g_vectorData2));if(dMaxID2>dMaxID1){dMaxID1 = dMaxID2;}int iMaxY = (int(dMaxID1)/10+1)*10;return iMaxY;
}void XXX_dataPlayBack::deleteDBThread()
{XXX_BaseDB::instance()->closeDBThread(false);XXX_BaseDB::instance()->stopDBThread(true);XXX_BaseDB::instance()->exitDBThread(false);if(m_threadDBBase->isRunning()){m_threadDBBase->quit();m_threadDBBase->wait();}//    m_threadDBBase = nullptr;
//    delete m_threadDBBase;
//    XXX_BaseDB::instance() = nullptr;
//    delete XXX_BaseDB::instance();
}void XXX_dataPlayBack::on_comboBox_Table_currentTextChanged(const QString &arg1)
{m_strTableName = arg1;//XXX_BaseDB::instance()->setOpenTableName(m_strTableName);int iMaxID;XXX_BaseDB::instance()->setOpenTableName(arg1);XXX_BaseDB::instance()->getMaxID(iMaxID);ui->hSlider_move->setRange(1,iMaxID);QString strMaxTime;XXX_BaseDB::instance()->getFirstTime(iMaxID,strMaxTime);ui->label_LastTime->setText(strMaxTime);m_threadDBBase->start();XXX_BaseDB::instance()->exitDBThread(true);XXX_BaseDB::instance()->closeDBThread(true);XXX_BaseDB::instance()->stopDBThread(false);XXX_BaseDB::instance()->setStartGetID(0,m_iPlayX);emit signalDBThread();QThread::msleep(100);m_timerMove->start(m_iFrequency);}void XXX_dataPlayBack::on_comboBox_DB_currentIndexChanged(int index)
{ui->comboBox_Table->clear();QString strOpenDBPath = m_strDBPath + m_listDBName.at(index) + ".db";//XXX_BaseDB::instance() = new XXX_BaseDB;m_threadDBBase = new QThread(this);XXX_BaseDB::instance()->moveToThread(m_threadDBBase);connect(this,&XXX_dataPlayBack::signalDBThread,XXX_BaseDB::instance(),&XXX_BaseDB::backDataBaseThread);QStringList listTableName;bool bRet = XXX_BaseDB::instance()->getDBTableName(strOpenDBPath,listTableName);if(!bRet){return;}for (int var = 0; var < listTableName.count(); ++var) {if(!listTableName.at(var).contains("Default")){listTableName.removeAt(var);}}ui->comboBox_Table->addItems(listTableName);
}void XXX_dataPlayBack::on_pushButton_start_clicked(bool checked)
{//m_bRunTimer = checked;m_pDraw1->setLabelView(m_bRunTimer);m_pDraw2->setLabelView(m_bRunTimer);m_bRunTimer = !m_bRunTimer;if(m_bRunTimer){if(m_timerMove == nullptr)return;if(ui->hSlider_move->value() < m_iPlayX)XXX_BaseDB::instance()->setStartGetID(0,m_iPlayX);elseXXX_BaseDB::instance()->setStartGetID(ui->hSlider_move->value()-m_iPlayX,m_iPlayX);XXX_BaseDB::instance()->exitDBThread(true);XXX_BaseDB::instance()->stopDBThread(false);m_timerMove->start(m_iFrequency);ui->pushButton_zoom_in->setVisible(false);ui->pushButton_zoom_out->setVisible(false);ui->pushButton_start->setText("暂停");}else{if(m_timerMove == nullptr)return;m_timerMove->stop();XXX_BaseDB::instance()->stopDBThread(true);XXX_BaseDB::instance()->exitDBThread(false);ui->pushButton_zoom_in->setVisible(true);ui->pushButton_zoom_out->setVisible(true);ui->pushButton_start->setText("播放");}}

博客签名2021

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】单例模式【两种实现方式】

目录 一、了解单例模式前的基础题 1、设计一个类&#xff0c;不能被拷贝 2、设计一个类&#xff0c;只能在堆上创建对象 3、设计一个类&#xff0c;只能在栈上创建对象 4、设计一个类&#xff0c;不能被继承 二、单例模式 1、单例模式的概念 2、单例模式的两种实现方式 …

Qt工程打包工具 windeployqt 的用法

1.复制工程下的“Debug”或者“Release”文件夹到你喜欢的路径&#xff0c;例如&#xff1a;D:\QT_out\ 2.在操作系统“开始”选项找到“Qt”文件夹&#xff0c;打开“Qt 5.15.2&#xff08;MSVC 2019 64-bit&#xff09;” 重点&#xff1a; 这里要注意的是&#xff0c;一定…

Linux常见指令:从基础到理论

前言 目录 前言 1. find指令 拓展 2. grep指令 拓展 sort指令 uniq指令 wc指令 3. zip/unzip指令 4. tar指令 5. uname指令 拓展 6. Linux常用热键 7. 关机 8. rz指令 拓展 scp指令 9. shell命令以及运行原理 Linux常见指令是使用Linux系统时必不可少的一部分。通过掌握…

简单好看个人引导页毛玻璃页面 HTML 源码

毛玻璃个人引导页源码&#xff0c;界面简洁&#xff0c;已测可完美搭建&#xff0c;UI非常不错的&#xff0c;有兴趣的自行去安装体验吧&#xff0c;其它就没什么好介绍的了。 学习资料源代码&#xff1a;百度网盘 请输入提取码&#xff1a;ig8c

[RCTF 2019]nextphp

文章目录 考点前置知识PHP RFC&#xff1a;预加载FFI基本用法PHP RFC&#xff1a;新的自定义对象序列化机制 解题过程 考点 PHP伪协议、反序列化、FFI 前置知识 PHP RFC&#xff1a;预加载 官方文档 通过查看该文档&#xff0c;在最下面找到预加载结合FFI的危害 FFI基本用法 …

Selenium关于内容信息的获取读取

在进行自然语言处理、文本分类聚类、推荐系统、舆情分析等研究中,通常需要使用新浪微博的数据作为语料,这篇文章主要介绍如果使用Python和Selenium爬取自定义新浪微博语料。因为网上完整的语料比较少,而使用Selenium方法有点简单、速度也比较慢,但方法可行,同时能够输入验…

yolov5 通过视频进行目标检测

打开yolov5-master文件夹&#xff0c;可以看到一个名为data的文件夹&#xff0c;在data中创建一个新的文件夹&#xff0c;命名为videos。 打开yolov5-master中的detect.py可以看到一行代码&#xff08;大概在245行左右&#xff09;为 parser.add_argument(--source, typestr,…

fastspar微生物相关性推断

fastspar 简介 fastspar是基于Sparcc通过C编写的&#xff0c;速度更快&#xff0c;内存消耗更少。sparcc是基于OTU的原始count数&#xff0c;通过log转换和标准化去除传统相对丰度的天然负相关&#xff08;因为所有OTU之和为1&#xff0c;某些OTU丰度高另外一些自然就少&…

tqdm学习

from tqdm import tqdmepochs 10 epoch_bar tqdm(range(epochs)) count 0 for _ in epoch_bar:count count1print("count {}".format(count))print(_)每次就是一个epoch

【Python】数据分析案例:世界杯数据可视化

文章目录 前期数据准备导入数据 分析&#xff1a;世界杯中各队赢得的比赛数分析&#xff1a;先打或后打的比赛获胜次数分析&#xff1a;世界杯中的抛硬币决策分析&#xff1a;2022年T20世界杯的最高得分者分析&#xff1a;世界杯比赛最佳球员奖分析&#xff1a;最适合先击球或追…

JAVA代码视频转GIF(亲测有效)

1.说明 本次使用的是JAVA代码视频转GIF&#xff0c;maven如下&#xff1a; <dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-win64</artifactId><version>3.2.0</version></dependency><dependency&…

07、SpringBoot+微信支付 -->处理超时订单(定时查询、核实微信支付平台的订单、调用微信支付平台查单接口、更新本地订单状态、记录支付日志)

目录 Native 支付处理超时订单定时的讲解需求分析代码定时任务&#xff1a;WxPayTask定时查询的方法&#xff1a;核实订单状态等操作 &#xff1a;WxPayServiceImpl查单接口方法&#xff1a;queryOrder更新本地订单状态&#xff1a;updateStatusByOrderNo记录支付日志&#xff…

苍穹外卖-day06

苍穹外卖-day06 课程内容 HttpClient微信小程序开发微信登录导入商品浏览功能代码 功能实现&#xff1a;微信登录、商品浏览 微信登录效果图&#xff1a; 商品浏览效果图&#xff1a; 1. HttpClient 1.1 介绍 HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;…

单例模式 rust和java的实现

文章目录 单例模式介绍应用实例&#xff1a;优点使用场景 架构图JAVA 实现单例模式的几种实现方式 rust实现 rust代码仓库 单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建…

rabbitMQ rascal/amqplib报错 Error: Unexpected close 排查

以下是一些可能导致此 RabbitMQ 客户端或任何其他 RabbitMQ 客户端中的套接字读取或写入失败的常见场景 1.错过&#xff08;客户端&#xff09;心跳 第一个常见原因是RabbitMQ 检测到心跳丢失。发生这种情况时&#xff0c;RabbitMQ 将添加一个有关它的日志条目&#xff0c;然…

SQL note1:Basic Queries + Joins Subqueries

目录 一、Basic Queries 1、数据库术语 2、查表 3、过滤掉我们不感兴趣的行 4、布尔运算 5、过滤空值&#xff08;NULL&#xff09; 6、分组和聚合 1&#xff09;汇总数据的列 2&#xff09;汇总数据组 7、分组聚合的警告 1&#xff09;SELECT age, AVG(num_dogs) FR…

基于ssm的大学生社团管理系统

基于ssm的大学生社团管理系统 摘要 基于SSM的大学生社团管理系统是一个全面、高效的社团管理平台&#xff0c;旨在帮助大学生和社团管理员更方便、更快捷地进行社团活动的组织和管理。该系统基于Spring、SpringMVC和MyBatis&#xff08;简称SSM&#xff09;开发&#xff0c;这三…

Ubuntu中安装rabbitMQ

一、安装 RabbitMQ ①&#xff1a;更新源 sudo apt-get update②&#xff1a;安装Rrlang语言 由于RabbitMq需要erlang语言的支持&#xff0c;在安装RabbitMq之前需要安装erlang sudo apt-get install erlang-nox③&#xff1a;安装rabbitMQ sudo apt-get install rabbitmq-s…

【算法与数据结构】216、LeetCode组合总和 III

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以直接利用77题的代码【算法与数据结构】77、LeetCode组合&#xff0c;稍作修改即可使用。   …

APISpace IP归属地查询接口案例代码

1.IP归属地查询API 1.1 API接口简介 IP归属地查询API&#xff1a;根据IP地址查询归属地信息&#xff0c;包含国家、省、市、区县和运营商等信息。APISpace 提供了IPv4 和 IPv6 的IP归属地查询接口&#xff0c;并且包含了各种归属地精度查询的接口。 1.2 IPv4 IPv4归属地查询…