2 sinat 27999793 sinat_27999793 于 2015.05.27 11:35 提问

关于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();
}

3个回答

gamefinity
gamefinity   Rxr 2015.05.27 12:16

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();                                          //画图
}
sinat_27999793
sinat_27999793 回复知常曰明: 多谢了!我大概知道了!
接近 3 年之前 回复
gamefinity
gamefinity 回复sinat_27999793: 如果这样说也没什么问题了。一共只能显示9个数据,第一个是数据长度。就一个形参i的问题
接近 3 年之前 回复
gamefinity
gamefinity 回复sinat_27999793: 没什么呀,就是调用下面的那个函数。第一个参数是ui,第二个参数是要画的数据。第三个参数是数量。但是第三个参数有问题,首先,被调用函数的第三个形参应该是n,用i重复了,而且该函数里的n没有定义。其次函数里将8开始都往后移了一位,所以是最多显示10个数据么?
接近 3 年之前 回复
sinat_27999793
sinat_27999793 是qcustomPlot里面的画动态折线的例子,我在楼下粘贴全文,SimpleDemo(ui->qCustomPlot,tempnum,n); 这一句不明白,求解Orz
接近 3 年之前 回复
sinat_27999793
sinat_27999793   2015.05.27 19:22

源文件如下

#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

u010996425
u010996425   2015.06.01 20:05

请问会不会遇到执行ui->qCustomPlot时就提示ui中没有成员变量qCustomPlot的情况呢?我遇到这种情况,想知道怎么解决图片说明

u010996425
u010996425 回复sinat_27999793: 我后来发现了,是窗体的name属性要改为qCustomPlot,已经解决了,不过还是谢谢你的热心回答!
接近 3 年之前 回复
sinat_27999793
sinat_27999793 这个好像需要你在ui界面里面提升为QCustomPlot的QFrame,我这样改的
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!