画图之前一定要下载QCustomPlot,下载后还要在QT中引入QCustomPlot,然后拖出Widget控件,将其提升为QCustomPlot。
详细操作我在上个文章中写过,请参考QT绘图用QCustomPlot库,简单画一个曲线图,涉及了QCustomPlot的最基础知识(画图必用到的属性)_麦子穗的博客-CSDN博客_qt画曲线
先看运行后的效果图。
1654153283344
项目头文件代码:
1. 引入QCustomPlot的头文件(必须引入,不然会报错)
#include "qcustomplot.h"
2. 在头文件中声明两个函数
selectDataGraph(QCustomPlot *customPlot);此函数用来绘图
selectData(QCustomPlot *customPlot);此函数用来设置选择数据的相关属性或者参数
// 绘图
void selectDataGraph(QCustomPlot *customPlot);
// 选择图形中的数据
void selectData(QCustomPlot *customPlot);
3. 在头文件中声明私有槽函数用来实现数据选择和曲线的显示与隐藏
private slots:
// 设置显示/隐藏菜单
void contextMenuRequest(QPoint pos);
// 选中图例中的项,或者选中曲线时
void showGraph();
// 被选中的曲线隐藏
void hideGraph();
// 显示框选数据
void selectedShow();
项目文件.cpp代码:
1. 在设计界面拖动一个Widget控件提升为QCustomPlot,此控件的类名设置为selectDataGraph。
在构造函数中调用绘图函数时,需要将此控件作为参数传进去。代码如下
2. 绘图函数代码实现
//绘图
void SelectData::selectDataGraph(QCustomPlot *customPlot)
{
customPlot->legend->setVisible(true);
customPlot->legend->setFont(QFont("Helvetica",9));
QPen pen;
//曲线风格
QStringList lineNames;
lineNames << "lsNone" << "lsLine" << "lsStepLeft" << "lsStepRight" << "lsStepCenter" << "lsImpulse";
for(int i = QCPGraph::lsNone;i <= QCPGraph::lsImpulse; ++i)
{
customPlot->addGraph();
pen.setColor(QColor(qSin(i*1+1.2)*80+80, qSin(i*0.3+0)*80+80, qSin(i*0.3+1.5)*80+80));
customPlot->graph()->setPen(pen);//设置图表的画笔
customPlot->graph()->setName(lineNames.at(i-QCPGraph::lsNone));
customPlot->graph()->setLineStyle((QCPGraph::LineStyle)i); // 设置图表线段的风格
customPlot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 5)); // 设置图表散点图的样式
//数据
QVector<double> x(15), y(15);
for (int j=0; j<15; ++j)
{
x[j] = j/15.0 * 5*3.14 + 0.01;
y[j] = 7*qSin(x[j])/x[j] - (i-QCPGraph::lsNone)*5 + (QCPGraph::lsImpulse)*5 + 2;
}
customPlot->graph()->setData(x,