国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

QCustomPlot實現實時動態曲線

2019-11-09 20:30:15
字體:
來源:轉載
供稿:網友
Qt4中,可以使用QCustompPlot來繪制曲線,QCustompPlot是一個第三方工具,可以到官網下載:http://www.qcustomplot.com/index.php/download

這里實現一個實時動態曲線圖,用隨機數作為實時數據,程序運行結果如下:

主機環境:fedora9,Qt4.7,Qtcreator 2.0.1使用Qtcreator 2.0.1新建一個工程,基類模板選擇QMainWindow。將解壓得到的QCustompPlot文件夾里面的頭文件qcustomplot.h和源文件qcustomplot.cpp復制粘貼到工程文件夾下。在Qtcreator中,對著工程名右鍵,添加已有文件,將頭文件qcustomplot.h和源文件qcustomplot.cpp都添加到工程中來。在界面上拖拽一個widget部件,然后升級成Qcustomplot,(參考:http://www.bubuko.com/infodetail-744744.html)部件名稱改為customPlotmainwindow.h代碼如下:

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QTimer>#include "qcustomplot.h"namespace Ui {    class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();    //設置qcustomplot畫圖屬性,實時    void setuPRealtimeDataDemo(QCustomPlot *customPlot);private slots:    //添加實時數據槽    void realtimeDataSlot();private:    Ui::MainWindow *ui;    //定時器,周期調用realtimeDataSlot()槽,實現動態數據添加到曲線    QTimer dataTimer;};#endif // MAINWINDOW_Hmainwindow.cpp代碼如下:#include "mainwindow.h"#include "ui_mainwindow.h"#include <QVector>#include <QTimer>#include <QTime>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    setupRealtimeDataDemo(ui->customPlot);    ui->customPlot->replot();    ui->checkBox_temp->setChecked(true);    ui->checkBox_hui->setChecked(true);}MainWindow::~MainWindow(){    delete ui;}//畫圖初始化void MainWindow::setupRealtimeDataDemo(QCustomPlot *customPlot){//#if QT_VERSION < QT_VERSION_CHECK(4, 7, 0)  //QMessageBox::critical(this, "", "You're using Qt < 4.7, the realtime data demo needs functions that are available with Qt 4.7 to work properly");//#endif  //demoName = "Real Time Data Demo";  // include this section to fully disable antialiasing for higher performance:  /*  customPlot->setNotAntialiasedElements(QCP::aeAll);  QFont font;  font.setStyleStrategy(QFont::NoAntialias);  customPlot->xAxis->setTickLabelFont(font);  customPlot->yAxis->setTickLabelFont(font);  customPlot->legend->setFont(font);  */  customPlot->addGraph(); // blue line  customPlot->graph(0)->setPen(QPen(Qt::blue));  customPlot->graph(0)->setName("temp");  //customPlot->graph(0)->setBrush(QBrush(QColor(240, 255, 200)));  //customPlot->graph(0)->setAntialiasedFill(false);  customPlot->addGraph(); // red line  customPlot->graph(1)->setPen(QPen(Qt::red));  customPlot->graph(1)->setName("hui");  //customPlot->graph(0)->setChannelFillGraph(customPlot->graph(1));  customPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime);  customPlot->xAxis->setDateTimeFormat("hh:mm:ss");  customPlot->xAxis->setAutoTickStep(false);  customPlot->xAxis->setTickStep(2);  customPlot->axisRect()->setupFullAxesBox();  // make left and bottom axes transfer their ranges to right and top axes:  //connect(customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->xAxis2, SLOT(setRange(QCPRange)));  //connect(customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->yAxis2, SLOT(setRange(QCPRange)));  // setup a timer that repeatedly calls MainWindow::realtimeDataSlot:  connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));  dataTimer.start(0); // Interval 0 means to refresh as fast as possible  customPlot->legend->setVisible(true);}void MainWindow::realtimeDataSlot(){    //key的單位是秒    double key = QDateTime::currentDateTime().toMSeCSSinceEpoch()/1000.0;    qsrand(QTime::currentTime().msec() + QTime::currentTime().second() * 10000);    //使用隨機數產生兩條曲線    double value0 = qrand() % 100;    double value1 = qrand() % 80;    if (ui->checkBox_temp->isChecked())        ui->customPlot->graph(0)->addData(key, value0);//添加數據1到曲線1    if (ui->checkBox_hui->isChecked())        ui->customPlot->graph(1)->addData(key, value1);//添加數據2到曲線2    //刪除8秒之前的數據。這里的8要和下面設置橫坐標寬度的8配合起來    //才能起到想要的效果,可以調整這兩個值,觀察顯示的效果。    ui->customPlot->graph(0)->removeDataBefore(key-8);    ui->customPlot->graph(1)->removeDataBefore(key-8);      //自動設定graph(1)曲線y軸的范圍,如果不設定,有可能看不到圖像//也可以用ui->customPlot->yAxis->setRange(up,low)手動設定y軸范圍    ui->customPlot->graph(0)->rescaleValueAxis();    ui->customPlot->graph(1)->rescaleValueAxis(true);       //這里的8,是指橫坐標時間寬度為8秒,如果想要橫坐標顯示更多的時間    //就把8調整為比較大到值,比如要顯示60秒,那就改成60。    //這時removeDataBefore(key-8)中的8也要改成60,否則曲線顯示不完整。    ui->customPlot->xAxis->setRange(key+0.25, 8, Qt::AlignRight);//設定x軸的范圍    ui->customPlot->replot();}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正定县| 利津县| 商水县| 富源县| 周口市| 杨浦区| 松桃| 平利县| 新建县| 筠连县| 康平县| 寿宁县| 永和县| 太仆寺旗| 文安县| 固原市| 吴川市| 敖汉旗| 长垣县| 平定县| 项城市| 高唐县| 河西区| 伊春市| 宝山区| 稷山县| 行唐县| 山丹县| 汶川县| 舟山市| 秦皇岛市| 洪雅县| 揭东县| 栖霞市| 什邡市| 黄山市| 济宁市| 盐山县| 读书| 新和县| 延长县|