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 }
运行结果显示:
(曲线绘制好像有点丑,一直不知道如何解决,希望高手们看了代码后给点意见哟)


浙公网安备 33010602011771号