Qt5之实时曲线绘制

转自:http://www.cnblogs.com/panlonyin/archive/2013/05/21/3091634.html

(多的不说,直接上代码)

关键函数介绍:

setViewport(int x,int y,int width,int height); // 设置绘图设备的物理坐标

setWindow(QRect rect);  //设置画笔的逻辑坐标

scroll(int x, int y);  //将画板按(x,y)移动移动,一般若设置x<0,y = 0,则画板向右移|x|个像素,然后调用paintEvent(QPaintEvent *);函数


程序源代码如下:

mainwindow.h

复制代码
 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QTimer>
 6 
 7 class MainWindow : public QMainWindow
 8 {
 9     Q_OBJECT
10     
11 public:
12     MainWindow(QWidget *parent = 0);
13     ~MainWindow();
14     //绘制曲线
15     void drawCurves(QPainter &painter);
16     //实现绘制
17     void paintEvent(QPaintEvent *);
18 
19 
20     //实时数据最新点坐标
21     int displayData1ypos;
22     //实时数据次新点坐标
23     int displayData2ypos;
24     //最新点向次新点传送数据中转变量
25     int displayDataChange;
26 
27     //static bool isCreateDialog;
28 
29     QTimer *timer;
30 
31 
32 signals:
33 
34 public slots:
35     //实现定时触发
36     void timerEvent();
37 
38 
39 };
40 
41 #endif // MAINWINDOW_H
复制代码

mainwindow.cpp

复制代码
 1 #include "mainwindow.h"
 2 #include <QPainter>
 3 
 4 MainWindow::MainWindow(QWidget *parent)
 5     : QMainWindow(parent)
 6 {
 7     //  DrawCurve::isCreateDialog = true;
 8       displayData1ypos = 0;
 9       displayData2ypos = 0;
10       displayDataChange = 0;
11       setWindowTitle("Crowd Density Curve");
12 
13       timer = new QTimer(this);
14       timer->setInterval(100);
15       connect(timer,&QTimer::timeout,this,&MainWindow::timerEvent);
16       timer->start();
17 
18       resize(500,250);
19 
20 }
21 
22 MainWindow::~MainWindow()
23 {
24     
25 }
26 
27 
28 void MainWindow::paintEvent(QPaintEvent *)
29 {
30     QPainter painter(this);
31     painter.setViewport(0,0,this->width(),this->height()); //设置绘图设备的物理坐标
32     painter.setWindow(QRect(-1000,-25,1001,26));    //设置画笔的逻辑坐标
33 
34     drawCurves(painter);  //绘制曲线
35 
36 
37 }
38 
39 void MainWindow::drawCurves(QPainter &painter)
40 {
41     painter.setPen(QPen(Qt::red));
42     displayData2ypos = displayDataChange;
43     displayDataChange = displayData1ypos;
44     //painter.drawPoint(QPoint(0,-displayData1ypos));
45     painter.drawLine(QPoint(-4,-displayData2ypos),QPoint(0,-displayData1ypos));
46 }
47 
48 void MainWindow::timerEvent()
49 {
50     scroll(-4,0);
51     displayData1ypos = rand()%25;
52 }
复制代码

 

main.cpp

复制代码
 1 #include "mainwindow.h"
 2 #include <QApplication>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7     MainWindow w;
 8     w.show();
 9     
10     return a.exec();
11 }
复制代码

运行结果显示:

 

(曲线绘制好像有点丑,一直不知道如何解决,希望高手们看了代码后给点意见哟)

posted @ 2013-05-29 22:08  ADTL  阅读(3998)  评论(0)    收藏  举报