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

来源:互联网 发布:手机淘宝改支付宝绑定 编辑:程序博客网 时间:2024/05/18 03:04

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



原创粉丝点击