青海城乡建设厅网站 官网,wordpress 克隆页面,广州品牌设计网站建设,职业生涯规划大赛的目的QCustomPlot 是一个基于Qt的画图和数据可视化C控件。QCustomPlot 致力于提供美观的界面#xff0c;高质量的2D画图、图画和图表#xff0c;同时为实时数据可视化应用提供良好的解决方案。 该绘图库专注于制作美观、出版物质量高的2D绘图、图形和图表#xff0c;并为实时可视…QCustomPlot 是一个基于Qt的画图和数据可视化C控件。QCustomPlot 致力于提供美观的界面高质量的2D画图、图画和图表同时为实时数据可视化应用提供良好的解决方案。 该绘图库专注于制作美观、出版物质量高的2D绘图、图形和图表并为实时可视化应用程序提供高性能。QCustomPlot的几个重要类QCustomPlot 图表类用于图表的显示和交互QCPLayer 图层管理图层元素QCPLayerableQCPLayerable图层元素所有可显示的对象都是继承自图层元素QCPAbstractPlottable 绘图元素包含 折线图(QCPGraph)、曲线图(QCPCurve)、柱状图(QCPBars)、QCPStatiBox(盒子图)、QCPColorMap(色谱图)、QCPFinancial(金融图)QCPAxisRect 坐标轴矩形一个坐标轴矩形默认包含上下左右四个坐标轴但是可以添加多个坐标轴QCustomPlot下载下载地址https://www.qcustomplot.com/index.php/download选择版本2.1.0 QCustomPlot.tar.gzQCustomPlot 的使用解压下载的文件把qcustomplot.h和qcustomplot.cpp放到自己的项目工程复制文件并qt 的目录树添加存在的头文件源文件。在使用QCustomPlot类的地址包含头文件 #include qcustomplot.h拖拽控件提升类在UI Designer中可以拖动一个Widget控件到ui设计器上对这个窗体点击右键选择提升QCustomPlot如果是代码方式添加就不需要对控件提升的这布操作直接使用QCustomPlot 类声明对象即可。如 MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);QCustomPlot *mPlot new QCustomPlot(this);setCentralWidget(mPlot);
} 添加printsupport如果Qt版本在5.0以上需要在.pro文件中的QT变量加上printsupportQT widgets printsupport添加帮助文档在下载的documentation文件夹下有个qcustomplot.qch文件将它拷贝Qt的安装文档目录下一般为qt5.9\Docs\Qt-5.9会根据你的Qt版本号而做相应变动然后在QtCreator ——工具——选项——帮助——文档——添加选择qcustomplot.qch文件确定以后按F1就能跳转到QCustomPlot的帮助绘制具体图形 QVectordouble x(101), y(101); //初始化向量x和yfor (int i0; i101; i){x[i] i/50.0 - 1; // x范围[-1,1]y[i] x[i]*x[i]; // yx*x}mPlot-addGraph();//添加数据曲线一个图像可以有多个数据曲线mPlot-setViewport(QRect(0,0,400,400));// graph(0);可以获取某个数据曲线按添加先后排序// setData();为数据曲线关联数据mPlot-graph(0)-setData(x, y);mPlot-graph(0)-setName(第一个示例);// 设置图例名称// 为坐标轴添加标签mPlot-xAxis-setLabel(x);mPlot-yAxis-setLabel(y);// 设置坐标轴的范围以看到所有数据mPlot-xAxis-setRange(-1, 1);mPlot-yAxis-setRange(0, 1);mPlot-legend-setVisible(true); // 显示图例// 重画图像mPlot-replot();
实战心得显示折线图QCPGraph调用QCustomPlot类的addGraph函数表示添加一条曲线。 removeGraph //表示删除一条曲线从QCustomPlot调用graph函数则得到一条具体的曲线QCPGraph类指针。曲线设置数据源则调用QCPGraph的setData函数。customPlot-graph(0)-data().data()-clear();//清空数据刷新整个图表 customPlot-replot();//刷新通过QCustomPlot的成员变量指针 xAxisyAxis则获取数值坐标轴QCPAxis。类介绍QCustomPlotaddGraph 添加曲线如果keyAxis和valueAxi为空则底部(xAxis)用作键左边(yAxis)用作值轴如果指定keyAxis和valueAxis必须位于removeGraph 删除图元graph 获取图元addLayer //创建一个图层setCurrentLayerremoveLayer //删除一个图层不会删除图层对应的的对象layer、currentLayer 获取图层axisRects //获取坐标轴的矩形区域QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2; //坐标QCPLegend *legend; //图例QCPLayer 图层Layer是可能包含对象的、控制渲染顺序的对象。对于QCustomPlot对象内部具有一个渲染顺序列表在绘制时将会连续画出QCPLayerable对象。QCPLayer包含有序的QCPLayerable对象。构造函数QCPLayer(QCustomPlot* parentPlot, const QString layerName);父对象为QCustomPlot对象QCPLayer和QCustomPlot的关系调用QCustomPlot的currentLayer或者layer获取图层默认图层背景层、网格层、主层、坐标轴层、图例层和矩形选择区域层。默认情况下QCustomPlot有六个图层分别是“background” “grid” “main” “axes” “legend”和“overlay”注意顺序。最先绘制的是“overlay”层它只包含QCustomPlot选中的矩形QCustomPlot::selectionRect。往后分别是“axes”和“legend”表示默认轴和图例。在中间有一个“main”层它默认不含任何东西且为默认图层QCustomPlot::setCurrentLayer。这也就意味着所有可绘制的对象将会默认在此层。接着是QCPGrid对象与QCPAxis紧密相连background在最后面。当然你可以设置每个对象所在的图层QCPLayerable::setLayer。控制图层渲染顺序在绘制时控制图层非常简单使用QCustomPlot::addLayer方法创建一个指定层的图层如在“main”上层然后用QCustomPlot::setCurrentLayer设置设置为你刚刚创建的图层接下来的事情只需要和往常一样创建图层上的对象即可因为你设置了当前图层所以对象都将会放置在该图层。在同一图层内点的对象是覆盖形式的删除一个图层不会删除对应的的对象QCustomPlot::removeLayer常用的函数1.QListQCPLayerable* children() //获取当前图层的所有图元QCPLayerableQCPLayerable是所有可见对象的基类如axes、grids、graph和item等。QCPGraph 折线构造函数explicit QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis);如果keyAxis和valueAxi为空则底部(xAxis)用作键左边(yAxis)用作值轴常用函数设置曲线的字体颜色、画刷 setPen、setBrush设置曲线的风格 setLineStyle设置每个点的风格 setScatterStyle设置数据 setData 折线的类继承关系 QCPGraph和QCustomPlot的关系QCustomPlot调用addGraph得到QCPGraph指针。QCPAxis QCPAxis 描述轴行为轴需要依赖QCPAxisRectQCPAxisRect 描述矩形区域区域依赖于QCPCustomPlot构造函数 QCPAxis::QCPAxis (QCPAxisRect * parent, AxisType type);可以看出QCPAxis依赖与QCPAxisRect对象的。QCPAxis和QCustomPlot的关系QCustomPlot有成员变量QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2; 常用函数QCPAxisRect *axisRect() //得到矩形区域setLabel //设置名称setVisible //坐标轴是否显示 setTickLabels //tick Label 是否显示setLabelColor setTickLabelFont //设置坐标轴数字字体和颜色setRange //设置坐标轴范围自定义坐标轴调用QCPAxis的setTicker函数QCPAxisTicker是坐标轴的基类QCPAxisTickerDateTime类是日期时间坐标轴QCPAxisTickerTime是时间轴刻度类QCPAxisTickerPi设置Pi刻度标签QCPAxisTickerLog设置log对数刻度标签QCPAxisTickerFixed定义轴标尺修改指定的步长控制坐标轴刻度的数目void setupTestQCPAxisTickerDateTime()
{customPlot-setInteraction(QCP::iRangeDrag, true);customPlot-setInteraction(QCP::iRangeZoom, true);QDateTime dateTime QDateTime::currentDateTime();double now dateTime.toTime_t();//当前时间转化为秒//生成时间刻度对象QSharedPointerQCPAxisTickerDateTime dateTimeTicker(new QCPAxisTickerDateTime);customPlot-xAxis-setTicker(dateTimeTicker);//dateTimeTicker-setDateTimeSpec(Qt::UTC);//设施世界时间即不加上时区的时间dateTimeTicker-setTickCount(12);dateTimeTicker-setTickStepStrategy(QCPAxisTicker::tssMeetTickCount);customPlot-xAxis-setSubTicks(false);customPlot-xAxis-setRange(now, now3600*24);//x轴范围从当前时间起往后推24小时QVectordouble yData, xData;//生成数据for (int i 0; i 24; i){xData.push_back(now i * 3600.0);yData.push_back(pow(double(i), 2) 550.0*sin(double(i)/4.0));}dateTimeTicker-setDateTimeFormat(yyyy-M-d h:m);//设置x轴刻度显示格式customPlot-xAxis-setTickLabelRotation(30);//设置刻度标签顺时针旋转30度customPlot-yAxis-setRange(-1000,10000);customPlot-addGraph();customPlot-graph(0)-setData(xData, yData);//显示数据
}
3.运行结果图
QCPAxisRec 矩形区域QCPAxisRect是多个轴围成的一个矩形区域也就是坐标轴.构造函数 QCPAxisRect (QCustomPlot *parentPlot, bool setupDefaultAxestrue);第一个参数是父对象QCustomplot第二个参数是否设置默认轴四个轴但是只显示左下。构造函数告诉我们QCPAxisRec必须依赖与一个父对象QCustomPlot。常用函数addAxis //添加一个轴QCPAxis *addAxis(QCPAxis::AxisType type, QCPAxis *axisnullptr);第二个参数是一个QCPAxis对象指针轴由内部创建。axis 为空指针表示由内部创建并维护这个轴的生命周期请不要直接delete返回的轴指针而是使用removeAxis删除轴是外部实例。axis为指向实例的指针表示这个轴是用户自行创建的removeAxis 移除特定轴axis、axes 获取坐标区域的坐标轴QCPAxisRect和QCustomPlot的关系QCustomPlot调用axisRects得到获取坐标轴的矩形区域对象指针。 QCPLegend 图例该对象管理了一个QCustomPlot的一个图例。它是一个小的Box区域包含名称和图标。通过QCPAbstarctPlottable::adddToLegend来填充QCPLegend内容对于主图示QCustomPlot::legend仅需设置QCustomPlot::setAutoAddPlottableToLegend为true默认行为就可以自动创建一些legend项legend是一个与特定可绘制对象相关的对象可以被QCPAbstractPlottable::removeFromLegend去除。此外QCPLegend提供了一些接口增加和直接管理这些legenditem、itemWithPlottable、itemCount、addItem、removeItem等。因为QCPLegend是从QCPLayoutGrid继承而来的因此通过对象QCPLayoutElement可以将legend添加到任意位置legend是QCPLayoutElement的元素默认情况下每一个QCustomPlot只有一个legendQCustomPlot::legend表示主轴的内嵌布局中QCPAxisRect::insetLayout你可以通过QCPLayoutInset实现在矩形区域移动使用QCPLayout/QCPLayoutElement接口实现矩形外移动。常用的函数setVisible、setFont、setTextColor设置legend是否显示字体大小、颜色 removeItem 设置不显示哪一项设置图例位置这里设置左上角 customPlot-axisRect()-insetLayout()-setInsetAlignment(0, Qt::AlignLeft | Qt::AlignTop);