问题描述
- 关于qt问题,拜托各位帮忙注释一下
-
void MainWindow::SimpleDemo()
{QTime t;
t=QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
n=qrand()%50+5;
SimpleDemo(ui->qCustomPlot,tempnum,n);
}void MainWindow::SimpleDemo(QCustomPlot *CustomPlot,double tempnum[10],int i)
{
QVector temp(10);
QVector temp1(10);for(int i=8;i>=0;i--)
{
tempnum[i+1]=tempnum[i];
}
tempnum[0]=n;
for(int i=0;i<10;i++)
{temp[i] = i; temp1[i] =tempnum[i];
}
CustomPlot->addGraph();
CustomPlot->graph(0)->setPen(QPen(Qt::red));
CustomPlot->graph(0)->setData(temp,temp1);CustomPlot->xAxis->setLabel("time");
CustomPlot->yAxis->setLabel("temp/shidu");CustomPlot->xAxis->setRange(0,11);
CustomPlot->yAxis->setRange(0,100);
CustomPlot->replot();
}
解决方案
QCustomPlot是Qt中使用的一个用来画曲线图、趋势图、坐标图、柱状图等类似二维图的库,可在自己的项目中直接使用两个源文件,或预先编译成库。
void MainWindow::SimpleDemo()
{
QTime t;
t=QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
n=qrand()%50+5; //从本函数开始到现在,随机产生n,看起来是画图的数据量,但是根据后面,这个数其实没有用
SimpleDemo(ui->qCustomPlot,tempnum,n); //调用实际画图函数.tempnum是作为画图用的数据.不是在这些代码中产生的,应该是外面带进来的
}
void MainWindow::SimpleDemo(QCustomPlot *CustomPlot,double tempnum[10],int i)
{
QVector temp(10);
QVector temp1(10);
for(int i=8;i>=0;i--)
{
tempnum[i+1]=tempnum[i];
}
tempnum[0]=n; //本函数,这里以上的都是在准备要画图的数据.在数组的最前面插入总数据量.(应该是控件要求)
for(int i=0;i<10;i++)
{
temp[i] = i;
temp1[i] =tempnum[i];
} //将画图的数据整理在固定的数组里面去(应该是为了防止意外改动数据其他数据操作对此干扰等)
CustomPlot->addGraph(); //开始画图
CustomPlot->graph(0)->setPen(QPen(Qt::red)); //设置图的画笔
CustomPlot->graph(0)->setData(temp,temp1); //设置图的数据
CustomPlot->xAxis->setLabel("time"); //设置x坐标的单位
CustomPlot->yAxis->setLabel("temp/shidu"); //设置y坐标的单位
CustomPlot->xAxis->setRange(0,11); //设置x坐标的取值范围
CustomPlot->yAxis->setRange(0,100); //设置y坐标的取值范围
CustomPlot->replot(); //画图
}
解决方案二:
源文件如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVector>
#include <QTimer>
#include <QTime>
//#include <time.h>
//#include "qcustomplot.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for(int i=0;i<10;i++)
{
tempnum[i] = 0;
}
n=0;
QTimer *timer = new QTimer(this);
timer->start(1000);
connect(timer,SIGNAL(timeout()),this,SLOT(SimpleDemo()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::SimpleDemo()
{
QTime t;
t=QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
n=qrand()%50+5;
SimpleDemo(ui->qCustomPlot,tempnum,n);
}
void MainWindow::SimpleDemo(QCustomPlot *CustomPlot,double tempnum[10],int i)
{
QVector<double> temp(10);
QVector<double> temp1(10);
for(int i=8;i>=0;i--)
{
tempnum[i+1]=tempnum[i];
}
tempnum[0]=n;
for(int i=0;i<10;i++)
{
temp[i] = i;
temp1[i] =tempnum[i];
}
CustomPlot->addGraph();
CustomPlot->graph(0)->setPen(QPen(Qt::red));
CustomPlot->graph(0)->setData(temp,temp1);
CustomPlot->xAxis->setLabel("time");
CustomPlot->yAxis->setLabel("temp/shidu");
CustomPlot->xAxis->setRange(0,11);
CustomPlot->yAxis->setRange(0,100);
CustomPlot->replot();
}
头文件如下
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"
#include <QVector>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
double tempnum[10];
int n;
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void SimpleDemo(QCustomPlot *customPlot,double tempnum[10],int i);
public slots:
void SimpleDemo();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
解决方案三:
请问会不会遇到执行ui->qCustomPlot时就提示ui中没有成员变量qCustomPlot的情况呢?我遇到这种情况,想知道怎么解决