QT下将数组里的数据画成曲线

Qt画图要用到QCustomPlot,首先下载QCustomPlot      

1.新建QT项目工程,基类为mainwindow

2.将下载好的文件夹里面的头文件qcustomplot.h和源文件qcustomplot.cpp复制粘贴到工程文件夹下。然后在新建的QT工程中添加这两个文件。 

3.在工程的.pro文件的第9行末尾加入printsupport 即:

greaterThan(QT_MAJOR_VERSION,4): QT +=widgets printsupport

4.在新建的QT工程中的ui里添加QCustomPlot

①进入ui设计模式,输入widget查找,从搜索结果中.向主窗口中添加一个widget区域,对着所添加的widget区域点击右键,选择“提升为”按钮。 
②提升类名称输入“QCustomPlot”,点击添加。 
③选中QCustomPlot,点击提升按钮,我们创建的widget就被提升为QCustomPlot类了。

④编译一下,没有错误就可以使用QCustomPlot了,如果出现undefined reference的错误,一般是漏做了上面某步骤

5.开始编程

以下为mianwindow.h的代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "qcustomplot.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    double num1[100];
    double num2[100];
        int n;
        void Graph_Show(QCustomPlot *customPlot);

public slots:
        void Graph_Show();

   
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

以下为mainwindow.cpp的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVector>
#include <QTime>
#include <QTimer>
#include <time.h>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QTimer *timer = new QTimer(this);
    timer->start(500);
    connect(timer,SIGNAL(timeout()),this,SLOT(Graph_Show()));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::Graph_Show()
{

    QTime t;
    t=QTime::currentTime();
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
    n=qrand()%50;
    Graph_Show(ui->widget);
}

void MainWindow::Graph_Show(QCustomPlot *CustomPlot)
{
    QVector<double> temp(100);
    QVector<double> temp1(100);
     QVector<double> temp2(100);

   srand( (unsigned)time(NULL) );//设置一个随机函数
    for(int i=0;i<100;i++)
    {
        num1[i]=rand()%101;
        num2[i] =rand()%101+100 ;
    }
    for(int i=0;i<100;i++)
    {
        temp[i] = i;
        temp1[i] =num1[i];
        temp2[i]=num2[i];
    }
   //设置画布颜色
    QLinearGradient plotGradient;
    //lotGradient.setStart(0, 0);
    //plotGradient.setFinalStop(0, 350);
    plotGradient.setColorAt(0, QColor(80, 80, 80));
    //plotGradient.setColorAt(1, QColor(50, 50, 50));
   ui->widget->setBackground(plotGradient);

   //设置坐标颜色/坐标名称颜色
    ui->widget->xAxis->setLabelColor(Qt::white);//文字颜色
    ui->widget->yAxis->setLabelColor(Qt::white);
    ui->widget->xAxis->setTickLabelColor(Qt::white);//坐标轴数字颜色
    ui->widget->yAxis->setTickLabelColor(Qt::white);
    ui->widget->xAxis->setBasePen(QPen(Qt::white, 1));//坐标轴颜色及宽度
    ui->widget->yAxis->setBasePen(QPen(Qt::white, 1));
    ui->widget->xAxis->setTickPen(QPen(Qt::white, 1));//主刻度
    ui->widget->yAxis->setTickPen(QPen(Qt::white, 1));
    ui->widget->xAxis->setSubTickPen(QPen(Qt::white, 1));//副刻度
    ui->widget->yAxis->setSubTickPen(QPen(Qt::white, 1));


    //设置属性可缩放,移动等
    ui->widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes |
                                         QCP::iSelectLegend | QCP::iSelectPlottables);
    CustomPlot->addGraph();//添加一条曲线
    CustomPlot->graph(0)->setPen(QPen(Qt::green)); //0是曲线序号,添加的第一条是0,设置曲线颜色
    CustomPlot->graph(0)->setData(temp,temp1); //输出各点的图像,x和y都是QVector类

    CustomPlot->xAxis->setLabel("x");//x轴的文字
    CustomPlot->yAxis->setLabel("y");//y轴的文字

    CustomPlot->xAxis->setRange(0,100);//x轴范围
    CustomPlot->yAxis->setRange(-100,200);//y轴范围
    CustomPlot->replot();//重绘
    CustomPlot->addGraph();//添加第二条曲线
    CustomPlot->graph(1)->setPen(QPen(Qt::yellow)); //1是曲线序号,添加的第二条是1,设置曲线颜色
    CustomPlot->graph(1)->setData(temp,temp2); 
}

其他地方不改变,运行后结果如图:


代码下载:http://download.csdn.net/detail/weiwen12138/9886622

QCustomPlot下载: http://download.csdn.net/detail/weiwen12138/9886626



  • 13
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Qt 6.2 中,可以使用 QChart、QChartView、QLineSeries 和 QTimer 类来绘制动态曲线图,同时可以从数组获取数据并更新坐标轴和数据。 以下是一个示例代码,用于绘制动态曲线图并从数组获取数据: ```c++ #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include <QtCore/QRandomGenerator> #include <QtCore/QTimer> QT_CHARTS_USE_NAMESPACE int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建曲线数据 QLineSeries *series = new QLineSeries(); // 创建图表并将曲线数据添加到图表中 QChart *chart = new QChart(); chart->addSeries(series); // 设置图表的标题 chart->setTitle("Dynamic Line Chart"); // 创建坐标轴 QValueAxis *axisX = new QValueAxis(); axisX->setRange(0, 100); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0, 100); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); // 创建图表视图,并将图表添加到视图中 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); // 设置视图窗口大小 chartView->resize(800, 600); chartView->show(); // 创建计时器,用于更新曲线数据 QTimer timer; QObject::connect(&timer, &QTimer::timeout, [=]() { // 从数组获取随机数作为曲线数据 qreal y = QRandomGenerator::global()->bounded(100); static int x = 0; *series << QPointF(x, y); x++; // 更新坐标轴范围 if (series->count() > 100) { axisX->setRange(x - 100, x); } // 更新坐标轴和曲线数据 chart->axisX()->setRange(axisX->min(), axisX->max()); chart->axisY()->setRange(axisY->min(), axisY->max()); chart->update(); }); timer.start(100); return a.exec(); } ``` 在这个示例中,我们创建了一个静态数组 `data`,用于存储曲线数据。在计时器的 timeout 信号中,我们从数组中获取一个随机数,并将其添加到曲线数据中。同时,我们使用 `static int x = 0;` 来记录曲线数据的横坐标,并根据曲线数据的数量来更新坐标轴范围。 在更新坐标轴和曲线数据时,我们需要使用 `chart->axisX()->setRange(axisX->min(), axisX->max());` 和 `chart->axisY()->setRange(axisY->min(), axisY->max());` 来更新坐标轴,使用 `chart->update();` 来更新曲线数据。 当然,这只是一个简单的示例,你可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值