QCustomPlot绘制股票曲线,去除中间休市时间

news/2024/11/16 11:30:52/文章来源:https://www.cnblogs.com/bclshuai/p/18352279

QCPAxis中增加两个函数,设置x轴的值和标签映射关系,要把中午午休的时间去掉;

 

void setTickVector(QVector<double> tickVector) { mTickVector = tickVector; };

void setTickLabels(QVector<QString> tickLabel ) { mTickVectorLabels= tickLabel; }

void NGraph::SetXTimeLabel(QString strTimeFormat)
{//ui.NGragh->xAxis->setTickLabelType(QCPAxis::ltDateTime);//ui.NGragh->xAxis->setDateTimeFormat(strTimeFormat);//ui.NGragh->xAxis->setDateTimeSpec(Qt::LocalTime);//QSharedPointer<QCPAxisTickerDateTime> dateTimeTicker(new QCPAxisTickerDateTime);//dateTimeTicker->setDateTimeFormat(strTimeFormat);//dateTimeTicker->setDateTimeSpec(Qt::LocalTime);//ui.NGragh->xAxis->setTicker(dateTimeTicker);ui.NGragh->xAxis->setFixTickLabel(true);ui.NGragh->xAxis->setTickLabels(true); // 不显示这一段的刻度标签ui.NGragh->xAxis->setSubTicks(false);  // 不显示子刻度QTime time=QTime::fromString("0930", "hhmm");double starttime= time.hour()*3600+ time.minute()*60;ui.NGragh->xAxis->setTickVector(QVector<double>({ starttime,starttime +1800,starttime+1800*2,starttime+1800*3,starttime+1800*4,starttime+1800*5,starttime + 1800 *6,starttime + 1800 *7,starttime + 1800 * 8 }));ui.NGragh->xAxis->setTickLabels(QVector<QString>({"09:30","10:00","1030","11:00","11:30","13:30","14:00","14:30","15:00"}));
}

因为会自动生成坐标轴,所以需要再顶一个个变量,设置固定坐标轴

  ui.NGragh->xAxis->setFixTickLabel(true);
 void setFixTickLabel(bool fix) { mbFixTickLabel = fix; };
然后在生成坐标轴的地方加上判断,如果设置了true,则不自动生成标签
void QCPAxis::setupTickVectors()
{if (!mParentPlot) return;if ((!mTicks && !mTickLabels && !mGrid->visible()) || mRange.size() <= 0) return;if (mbFixTickLabel == false){QVector<QString> oldLabels = mTickVectorLabels;mTicker->generate(mRange, mParentPlot->locale(), mNumberFormatChar, mNumberPrecision, mTickVector, mSubTicks ? &mSubTickVector : nullptr, mTickLabels ? &mTickVectorLabels : nullptr);mCachedMarginValid &= mTickVectorLabels == oldLabels; // if labels have changed, margin might have changed, too
  }
}

 

最后在生成数据的地方,如果是下午时间,则自动减去中午的休市的1个半小时,也就是5400秒,也是时间值前移5400秒,去掉休市时间,标签值映射关系则是向后移;这样看起来中间没有中断,而且时间标签也能对的上
if (it != m_mapMiniteData.end()){QVariantList listdata = it.value().value("listdata").toList();QVector<double> x, y;for (int i = 0; i < listdata.size(); i++){if (listdata[i].toMap().value("time").toString() >= "1300"){QTime  time = QTime::fromString(listdata[i].toMap().value("time").toString(), "hhmm").addSecs(-5400);x.push_back(time.hour() * 3600 + time.minute() * 60);}else{QTime  time = QTime::fromString(listdata[i].toMap().value("time").toString(), "hhmm");x.push_back(time.hour() * 3600 + time.minute() * 60);}y.push_back(listdata[i].toMap().value("price").toDouble());}m_Graph.hide();m_Graph.SetData(0, x, y);m_Graph.show();}

 



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

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

相关文章

003.Vue3入门,使用绑定属性

1、代码如下:<template><div v-bind:id="myId" v-bind:class="testCls">测试</div> </template><script> export default {data() {return {testCls: "appclass",myId: "appId",}} } </script>&…

Hyper-V环境下直接安装群晖系统详解

Hyper-V环境下直接安装群晖系统,无需嵌套,操作步骤操作步骤及注意事项 一、前期准备 1. 软件需求确保操作系统为Windows 10/11 企业版多会话或Windows Server 2016及以上版本。 检查并更新系统至最新版本,确保所有必要的补丁都已安装。2. 硬件需求确认主板支持VT-x/SVM/VT-d/I…

词云图大师推出无缝视频录制功能!

我们非常高兴地宣布,词云图大师(WordCloudMaster)推出了一项全新的功能:无缝视频录制!这一创新功能将彻底改变您展示和分享词云的方式,为您的创作过程带来全新的维度。https://apps.apple.com/cn/app/wordcloudmaster-word-clouds/id6465173621为什么您会喜欢无缝视频录制…

002.Vue3入门,使用模板语法的一些高级功能

1、代码如下:<template><h3>模板语法</h3><p>{{ msg }}</p><p>{{ msg_cn }}</p><p>{{ number + 1 }}</p><p>{{ ok ? Yes : No }}</p><p>{{ message.split("").reverse() }}</p><…

001.Vue3入门,使用语法功能

1、在App.vue中写入下面的代码<template><h3>模板语法</h3><p>{{ msg }}</p><p>{{ msg_cn }}</p> </template><script> export default {data() {return {msg: "Hello World!",msg_cn: "你好,世界"…

代码随想录day25 || 491 递增子序列,46 全排列, 47 全排列2

491 递增子序列 func findSubsequences(nums []int) [][]int {// 思路,在原数组上面找寻递增子序列,所以不能改变顺序,var path []intvar res [][]int//nums = quicksort(nums)backtracking(nums, &path, &res, -200) // 范围是【-100, 100】,传入一个不在区间的数…

微客在线客服系统 -全渠道连接一切,客服源码独立部署搭建方案

功能介绍微客在线客服系统是一个高性能、全渠道的即时通讯解决方案,专为中小企业设计,以满足日益增长的客户服务需求。系统支持PC网站、H5网站、APP等多种平台,实现无缝的客户沟通体验。主要功能在线客服系统:智能回复与人工接待相结合,提供多渠道整合,确保不错过任何客户…

windows查看端口占用

一、通过端口号查看进程号【netstat】1.查看80端口的占用情况 netstat -aon | findstr "80"2.根据PID查看进程信息 tasklist | findstr "16816"3.结束进程 (1).使用PID结束nginx(nginx会自动重启) taskki11 /f /pid 16816 (2)通过进程名字结束nginx taskki…

2024-08-10 闲话

2024-08-10 闲话听到一个 talk 最后一页 slide 截了个图。尤其是这部分。之前的想法得到了印证。 谁是先锋?

祝各位马喽七夕节快乐

初看只知剧中事,再看已是剧中人

14、Oracle中的Set运算符

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。 视频链接: 【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用 如果有侵权,请联系删除,谢谢。学习目标:描述 SET 操作符 将多个查询用 SET 操作符连接组…

15、Oracle中的高级子查询

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。 视频链接: 【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用 如果有侵权,请联系删除,谢谢。学习目标:书写多列子查询 在 FROM 子句中使用子查询 在SQ…