大家好,今天小编来为大家解答以下的问题,关于如何找游戏代码网站源码分享,查找游戏代码用什么软件这个很多人还不知道,现在让我们一起来看看吧!
一、头文件概述
从这篇文章开始,我们将正式的进入到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学习资料+视频教程~「链接」
1customPlot->legend->setVisible(true);\n2\n3//生成2种随机的蜡烛图数据,第一个是蜡烛图数据,第二个是美国线数据\n4intn=500;\n5QVector<double>time(n),value1(n),value2(n);\n6QDateTimestart=QDateTime(QDate(2014,6,11));\n7start.setTimeSpec(Qt::UTC);\n8doublestartTime=start.toTime_t();\n9doublebinSize=3600*24;//1天的数据\n10time[0]=startTime;\n11value1[0]=60;\n12value2[0]=20;\n13qsrand(9);//生成随机数时给指定的种子,那么生成的随机数都是相同的,因此每次运行后得到的结果都是不变的\n14for(inti=1;i<n;++i)\n15{\n16time[i]=startTime+3600*i;\n17value1[i]=value1[i-1]+(qrand()/(double)RAND_MAX-0.5)*10;\n18value2[i]=value2[i-1]+(qrand()/(double)RAND_MAX-0.5)*3;\n19}\n20\n21//初始化一个蜡烛图指针:\n22QCPFinancial*candlesticks=newQCPFinancial(customPlot->xAxis,customPlot->yAxis);\n23candlesticks->setName(&34;);\n24candlesticks->setChartStyle(QCPFinancial::csCandlestick);//设置图表类型为蜡烛图\n25candlesticks->data()->set(QCPFinancial::timeSeriesToOhlc(time,value1,binSize,startTime));//设置数据\n26candlesticks->setWidth(binSize*0.9);//设置每一个数据项的绘制宽度\n27candlesticks->setTwoColored(true);//设置是否显示两种颜色\n28candlesticks->setBrushPositive(QColor(245,245,245));//设置收>开画刷\n29candlesticks->setBrushNegative(QColor(40,40,40));//设置收<开画刷\n30candlesticks->setPenPositive(QPen(QColor(0,0,0)));//设置收>开画笔\n31candlesticks->setPenNegative(QPen(QColor(0,0,0)));//设置收>开画笔\n32\n33//初始化一个美国线图指针:\n34QCPFinancial*ohlc=newQCPFinancial(customPlot->xAxis,customPlot->yAxis);\n35ohlc->setName(&34;);\n36ohlc->setChartStyle(QCPFinancial::csOhlc);//设置图表类型为美国线\n37ohlc->data()->set(QCPFinancial::timeSeriesToOhlc(time,value2,binSize/3.0,startTime));//为了区分于蜡烛图显示,\n38ohlc->setWidth(binSize*0.2);\n39ohlc->setTwoColored(true);\n40\n41//创建一个坐标轴矩形\n42QCPAxisRect*volumeAxisRect=newQCPAxisRect(customPlot);\n43customPlot->plotLayout()->addElement(1,0,volumeAxisRect);\n44volumeAxisRect->setMaximumSize(QSize(QWIDGETSIZE_MAX,100));\n45volumeAxisRect->axis(QCPAxis::atBottom)->setLayer(&34;);\n46volumeAxisRect->axis(QCPAxis::atBottom)->grid()->setLayer(&34;);\n47//设置自己构造的坐标轴矩形属性\n48customPlot->plotLayout()->setRowSpacing(0);\n49volumeAxisRect->setAutoMargins(QCP::msLeft|QCP::msRight|QCP::msBottom);\n50volumeAxisRect->setMargins(QMargins(0,0,0,0));\n51//生成两种颜色的柱状图\n52customPlot->setAutoAddPlottableToLegend(false);//是否自动生成图例\n53QCPBars*volumePos=newQCPBars(volumeAxisRect->axis(QCPAxis::atBottom),volumeAxisRect->axis(QCPAxis::atLeft));\n54QCPBars*volumeNeg=newQCPBars(volumeAxisRect->axis(QCPAxis::atBottom),volumeAxisRect->axis(QCPAxis::atLeft));\n55for(inti=0;i<n/5;++i)\n56{\n57intv=qrand()%20000+qrand()%20000+qrand()%20000-10000*3;\n58(v<0?volumeNeg:volumePos)->addData(startTime+3600*5.0*i,qAbs(v));//构造随机数据\n59}\n60volumePos->setWidth(3600*4);\n61volumePos->setPen(Qt::NoPen);\n62volumePos->setBrush(QColor(100,180,110));\n63volumeNeg->setWidth(3600*4);\n64volumeNeg->setPen(Qt::NoPen);\n65volumeNeg->setBrush(QColor(180,90,90));\n66\n67//设置自己构造的坐标轴矩形的x轴和QCustomPlot中的坐标轴矩形(默认的会生成一个)x轴同步,两个坐标轴永远显示的坐标范围是一样的\n68connect(customPlot->xAxis,SIGNAL(rangeChanged(QCPRange)),volumeAxisRect->axis(QCPAxis::atBottom),SLOT(setRange(QCPRange)));\n69connect(volumeAxisRect->axis(QCPAxis::atBottom),SIGNAL(rangeChanged(QCPRange)),customPlot->xAxis,SLOT(setRange(QCPRange)));\n70//构造一个新的坐标轴刻度计算类\n71QSharedPointer<QCPAxisTickerDateTime>dateTimeTicker(newQCPAxisTickerDateTime);\n72dateTimeTicker->setDateTimeSpec(Qt::UTC);\n73dateTimeTicker->setDateTimeFormat(&34;);\n74volumeAxisRect->axis(QCPAxis::atBottom)->setTicker(dateTimeTicker);//赋予自己构造的坐标轴矩形的x轴一个新的刻度计算类\n75volumeAxisRect->axis(QCPAxis::atBottom)->setTickLabelRotation(15);\n76customPlot->xAxis->setBasePen(Qt::NoPen);\n77customPlot->xAxis->setTickLabels(false);//不显示坐标轴文本\n78customPlot->xAxis->setTicks(false);//不显示坐标轴(这个接口实现的不友好,后续文章我会具体说到)\n79customPlot->xAxis->setTicker(dateTimeTicker);//赋予默认的坐标轴矩形的x轴一个新的刻度计算类\n80customPlot->rescaleAxes();\n81customPlot->xAxis->scaleRange(1.025,customPlot->xAxis->range().center());\n82customPlot->yAxis->scaleRange(1.1,customPlot->yAxis->range().center());\n83\n84//设置两个坐标轴矩形左右对齐\n85QCPMarginGroup*group=newQCPMarginGroup(customPlot);\n86customPlot->axisRect()->setMarginGroup(QCP::msLeft|QCP::msRight,group);\n87volumeAxisRect->setMarginGroup(QCP::msLeft|QCP::msRight,group);
图3蜡烛图运行示意图
OK,本文到此结束,希望对大家有所帮助。
