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