范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

QCustomplot使用分享源码解读

  一、头文件概述
  从这篇文章开始,我们将正式的进入到QCustomPlot的实践学习中来,首先我们先来学习下QCustomPlot的类图,如果下载了QCustomPlot源码的同学可以自己去QCustomPlot的目录下documentation/qcustomplot下寻找一个名字叫做index.html的文件,将其在浏览器中打开,也是可以找到这个库的类图。如图1所示,是组成一个QCustomPlot类图的可能组成形式。 一个图表(QCustomPlot):包含一个或者多个图层、一个或多个item(用于展示一些固定的元素,例如文本、线段等)、一个或者多个可以绘制的元素、一个布局 一个图层(QCPLayer):包含基本的元素(QCPLayerable) 一个QCPAbstractItem:包含一个或者多个位置信息 一个坐标轴矩形(QCPAxisRect):包含多个坐标轴、有一个图例类(多个图例项)
  图1 图表组成
  在一个QCustomPlot类图中最重要、用的最多的是QCPLayerable元素,几乎除了QCPLayer以外的元素都是继承于该类。 QCPAbstractPlottable:绘图元素,包含:折线图(QCPGraph)、曲线图(QCPCurve)、柱状图(QCPBars)、QCPStatiBox(盒子图)、QCPColorMap(色谱图)、QCPFinancial(金融图) QCPAbstractItem:标示项,包含:直线(QCPItemStraightLine)、线段(QCPItemLine)、曲线(QCPItemCurve)、矩形(QCPItemRect)、椭圆(QCPItemEllipse)、文本(QCPItemText)、小圆球(QCPItemTracer)、图片(QCPItemPixmap)、括弧(QCPItemBracket) 布局项(QCPLayoutElement):布局项(QCPAbstractLegendItem)、坐标轴矩形(QCPAxisRect) 网格线(QCPGrid):每一个坐标轴对应一个网格线 坐标轴(QCPAxis):一个坐标轴矩形包含四个坐标轴,上下左右四个坐标轴。
  图2 可以绘制元素类图 二、一个简单的示例
  如下代码是一个简单的蜡烛图代码,源码我是从官方网站上扒下来的,只是为了让大家有一个初步的了解,本来是英文的注释我换成了中文,然后添加了我自己个人的一些理解,运行结果如图3所示
  点击领取Qt学习资料+视频教程~「链接」
  1 customPlot->legend->setVisible(true);  2    3 // 生成2种随机的蜡烛图数据,第一个是蜡烛图数据,第二个是美国线数据  4 int n = 500;  5 QVector time(n), value1(n), value2(n);  6 QDateTime start = QDateTime(QDate(2014, 6, 11));  7 start.setTimeSpec(Qt::UTC);  8 double startTime = start.toTime_t();  9 double binSize = 3600*24; // 1天的数据 10 time[0] = startTime; 11 value1[0] = 60; 12 value2[0] = 20; 13 qsrand(9);//生成随机数时给指定的种子,那么生成的随机数都是相同的,因此每次运行后得到的结果都是不变的 14 for (int i=1; ixAxis, customPlot->yAxis); 23 candlesticks->setName("Candlestick"); 24 candlesticks->setChartStyle(QCPFinancial::csCandlestick);//设置图表类型为蜡烛图 25 candlesticks->data()->set(QCPFinancial::timeSeriesToOhlc(time, value1, binSize, startTime));//设置数据 26 candlesticks->setWidth(binSize*0.9);//设置每一个数据项的绘制宽度 27 candlesticks->setTwoColored(true);//设置是否显示两种颜色 28 candlesticks->setBrushPositive(QColor(245, 245, 245));//设置收>开画刷 29 candlesticks->setBrushNegative(QColor(40, 40, 40));//设置收<开画刷 30 candlesticks->setPenPositive(QPen(QColor(0, 0, 0)));//设置收>开画笔 31 candlesticks->setPenNegative(QPen(QColor(0, 0, 0)));//设置收>开画笔 32   33 // 初始化一个美国线图指针: 34 QCPFinancial *ohlc = new QCPFinancial(customPlot->xAxis, customPlot->yAxis); 35 ohlc->setName("OHLC"); 36 ohlc->setChartStyle(QCPFinancial::csOhlc);//设置图表类型为美国线 37 ohlc->data()->set(QCPFinancial::timeSeriesToOhlc(time, value2, binSize/3.0, startTime)); //为了区分于蜡烛图显示, 38 ohlc->setWidth(binSize*0.2); 39 ohlc->setTwoColored(true); 40   41 // 创建一个坐标轴矩形 42 QCPAxisRect *volumeAxisRect = new QCPAxisRect(customPlot); 43 customPlot->plotLayout()->addElement(1, 0, volumeAxisRect); 44 volumeAxisRect->setMaximumSize(QSize(QWIDGETSIZE_MAX, 100)); 45 volumeAxisRect->axis(QCPAxis::atBottom)->setLayer("axes"); 46 volumeAxisRect->axis(QCPAxis::atBottom)->grid()->setLayer("grid"); 47 // 设置自己构造的坐标轴矩形属性 48 customPlot->plotLayout()->setRowSpacing(0); 49 volumeAxisRect->setAutoMargins(QCP::msLeft|QCP::msRight|QCP::msBottom); 50 volumeAxisRect->setMargins(QMargins(0, 0, 0, 0)); 51 // 生成两种颜色的柱状图 52 customPlot->setAutoAddPlottableToLegend(false);//是否自动生成图例 53 QCPBars *volumePos = new QCPBars(volumeAxisRect->axis(QCPAxis::atBottom), volumeAxisRect->axis(QCPAxis::atLeft)); 54 QCPBars *volumeNeg = new QCPBars(volumeAxisRect->axis(QCPAxis::atBottom), volumeAxisRect->axis(QCPAxis::atLeft)); 55 for (int i=0; iaddData(startTime+3600*5.0*i, qAbs(v)); //构造随机数据 59 } 60 volumePos->setWidth(3600*4); 61 volumePos->setPen(Qt::NoPen); 62 volumePos->setBrush(QColor(100, 180, 110)); 63 volumeNeg->setWidth(3600*4); 64 volumeNeg->setPen(Qt::NoPen); 65 volumeNeg->setBrush(QColor(180, 90, 90)); 66   67 // 设置自己构造的坐标轴矩形的x轴和QCustomPlot中的坐标轴矩形(默认的会生成一个)x轴同步,两个坐标轴永远显示的坐标范围是一样的 68 connect(customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), volumeAxisRect->axis(QCPAxis::atBottom), SLOT(setRange(QCPRange))); 69 connect(volumeAxisRect->axis(QCPAxis::atBottom), SIGNAL(rangeChanged(QCPRange)), customPlot->xAxis, SLOT(setRange(QCPRange))); 70 // 构造一个新的坐标轴刻度计算类 71 QSharedPointer dateTimeTicker(new QCPAxisTickerDateTime); 72 dateTimeTicker->setDateTimeSpec(Qt::UTC); 73 dateTimeTicker->setDateTimeFormat("dd. MMMM"); 74 volumeAxisRect->axis(QCPAxis::atBottom)->setTicker(dateTimeTicker);//赋予自己构造的坐标轴矩形的x轴一个新的刻度计算类 75 volumeAxisRect->axis(QCPAxis::atBottom)->setTickLabelRotation(15); 76 customPlot->xAxis->setBasePen(Qt::NoPen); 77 customPlot->xAxis->setTickLabels(false);//不显示坐标轴文本 78 customPlot->xAxis->setTicks(false); //  不显示坐标轴  (这个接口实现的不友好,后续文章我会具体说到) 79 customPlot->xAxis->setTicker(dateTimeTicker);//赋予默认的坐标轴矩形的x轴一个新的刻度计算类 80 customPlot->rescaleAxes(); 81 customPlot->xAxis->scaleRange(1.025, customPlot->xAxis->range().center()); 82 customPlot->yAxis->scaleRange(1.1, customPlot->yAxis->range().center()); 83   84 // 设置两个坐标轴矩形左右对齐 85 QCPMarginGroup *group = new QCPMarginGroup(customPlot); 86 customPlot->axisRect()->setMarginGroup(QCP::msLeft|QCP::msRight, group); 87 volumeAxisRect->setMarginGroup(QCP::msLeft|QCP::msRight, group);
  图3 蜡烛图运行示意图

外国人穿中国旗袍伊万卡有点臃肿,梅拉尼亚有气质,英拉最好看旗袍,最具有东方色彩的服装,一直以来都是美的代表。如果问中国文化输出最强大的元素有哪些,那么旗袍,必然豁然在列。能够完美地勾勒出女性的身材,还不会显得艳俗,相反,旗袍的轻开衩,反而哈姆詹姆斯的无球和有球防守都很棒,他很好地护筐干扰湖人今日在季前赛中115119不敌太阳。赛后,湖人达尔文哈姆接受了采访。谈到勒布朗詹姆斯的防守端活力,哈姆说我认为他很棒。他在无球防守方面非常好,我们在中场休息时向他展示了一些比赛市值蒸发2200亿!入股阿斯顿马丁,吉利全球并购之路能走多远?热衷于买买买的吉利汽车,又成功再下一城。9月30日,吉利控股对外宣布,已完成对英国超豪华性能品牌阿斯顿马丁7。60的股份收购,而这也意味着吉利汽车的投资版图又再一次扩大。实际上,入S12全球总决赛小组赛D组最没悬念?RNG或是GEN克星伴随着2022全球总决赛入围赛的结束,本届世界赛16强队伍名单与分组情况已经全部出炉。他们分别是A组C9T1EDGFNCB组JDGG2DKEGC组RGETESGAMDRXD组GEN羊了个羊不止是骗局岂止是骗局,这简直就是赛博传销。因为羊了个羊根本就不是一款游戏。很多人批评,这玩意第二关太难,设计粗糙,毫无游戏性可言,甚至还有可能抄袭了8款游戏。其实,很多人不懂,羊了个羊这波是热效应是艾草的价值体现艾草较为干燥的特征,赋予了其悠久的历史。在远古,无论是钻木取火还是透镜取火或是火折子取火,离不开艾绒作为取火引生活在实践之中。火是艾灸的由来,火给人温暖以消除寒冷与疲倦,在火焰的直原来阴极生阳是有道理的因为有严重胃病,胃一直很疼,药吃了很多,但是几十年了始终未治好,在长期与痛疼作斗争的过程发現热敷胃部会舒服些,稍有寒凉就会更痛,前段时间听倪海厦老师讲课,他说阴极生阳,胃寒的人早上警惕秋季养生的几个误区一年四季春夏秋冬,指农历8910月为秋季。中医认为春夏养阳,秋冬养阴,因此秋季养生应顺应四时春生夏长,秋收冬藏的自然规律。那秋季如何养生哪,我们一起来注意几个秋季养生的误区一老年人逆转险胜!恩比德126,哈里斯93,马克西造惊喜,哈登认清现实NBA季前赛继续进行,76人主场迎来了和骑士的较量,此役里弗斯因为身体不适缺席,助教乔格尔将作为代理教练,首发方面,76人排出的阵容是哈登马克西哈里斯塔克恩比德,骑士则是米切尔加兰主动求变!想开了,蔡斌赛后表态北京时间10月6日,2022年女排世锦赛复赛阶段的比赛继续进行。在当日凌晨时段结束的一场比赛当中,中国女排以30轻取波多黎各队取得了复赛的首场胜利。本场比赛让人最欣喜的是,主教练蔡世乒赛再爆冷门!八强决出六个席位,瑞典大获全胜,静候国乒男团2022年10月6日,世乒赛继续进行,男团八强决出六个席位,仅差最后两场比赛的结果,葡萄牙30淘汰斯洛文尼亚,跟日本队争夺四强,瑞典30淘汰比利时,静候中国队争夺四强,另外格拉尔多
历史冷知识!你所不知道的关于英国东印度公司的15个事实英国东印度公司是历史上最臭名昭著的公司之一。该公司曾经征服了整个印度次大陆的领土。以下是关于东印度公司的15个事实。东印度公司的商船1英国东印度公司成立于1600年1600年12月晚清民国,大理善书卷帙浩繁内容丰富,成就其创作上的繁荣晚清民国时期的大理士绅以神道设教的方式,撰著了一批善书,它们是中国善书体系中不可或缺的一部分。晚清民国时期的大理善书,同其他善书一样,道德教化是其主要内容之一。书中的救劫内容及思想历史上,哪个大朝代的最后一个皇帝,已经不是开国皇帝的世孙了?秋日生活打卡季秦朝二世而亡,之后还有个子婴,已经去帝号改称王了,但也还是秦始皇的后人。西汉始终没有离开刘邦子孙一系。东汉刘秀,是刘邦的第九世孙,不过从汉武帝刘彻开始,已经跟刘秀的祖夏侯霸为何忘却父仇,选择归降蜀汉,保卫蜀汉到生命的尽头请大家在阅读前,先点击上面的关注,感谢各位的支持,希望能给大家带来良好的阅读体验,并与您分享阅读的快乐!笔者后续将会为大家带来更多的精彩故事嘉平元年,曹魏政权发生了一件改变时局的大吴三桂被满门抄斩却漏掉个儿子,他与陈圆圆隐居,如今后裔超千人公元1673年,吴三桂反叛清朝,引发了著名的三藩之乱。这场动乱前后持续了8年时间,虽然给清朝造成了巨大的动荡,但最终以吴氏的失败而告终。而在战争结束的前三年,吴三桂病逝,史书记载,云南7项措施奖励旅行社招徕省外游客入滇中国青年报客户端讯(中青报中青网记者张文凌)从11月2日至12日,云南省文化和旅游厅启动旅行社招徕省外游客入滇奖励等7项措施奖补申报。为落实好云南省人民政府办公厅关于精准做好疫情防许昕尝试新工作!兼职亚乒联主席挤时间工作忙碌为退役铺路转型2022乒乓球全国锦标赛,国乒老将许昕代表上海出战,第一轮大比分30击败广西队,许昕出任第三单打,以30赢球,时隔8个月重返赛场,个人竞技状态还不错。赛后,许昕谈到对本场比赛的看法康宝莱全球高级副总裁进博会是高水平对外开放的中国名片新华社北京11月4日电(记者宿亮周蕊)总部位于美国的全球营养品公司康宝莱全球高级副总裁中国区总裁郭木日前接受新华社记者专访时强调,中国国际进口博览会是高水平对外开放的中国名片,植根湖人从5连败到2连胜!谁注意1人的时间在增加?连勇士都忌惮他啊在主场对阵鹈鹕的比赛中,湖人经过加时以120比117击败了鹈鹕,赢得了本赛季的第二场胜利,相比起3天前的赛季首胜,这场胜利对于湖人的意义显然更大。因为它证明了湖人是有办法持续赢球的去西藏旅游时,男游客看到路边的帐篷可不能随便进,特别是白色的每个地方的习俗与习惯都是有一定的不同之处的,如果身为外地游客去到一个陌生的地方游玩的话,那么需要做的准备工作之一肯定有了解当地的民俗与文化,尽量做到不要在游玩的过程中做出一些冒犯当西宁被誉为青藏高原第一城,好多人却不知道它还是青海省省会这里是刘小顺的旅行和生活研究所。说到省会城市,相信大家应该不会陌生,比如江苏省的省会南京浙江省的省会杭州湖北省的省会武汉四川省的省会成都都是发展很不错的城市,最近这些年备受大家关注