效果图
插曲
(动态图的制作,使用FastStone Capture软件,注册见博客)
工程文件
使用qchart进行绘制
mainwindow头文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QtCharts/QChartView>//显示图表 #include <QtCharts/QLineSeries>//线系列 #include <QDoubleSpinBox> #include <QGridLayout> #include <QTimer> #include <QtCharts/QSplineSeries> #include <QtCharts/QValueAxis> QT_CHARTS_USE_NAMESPACE namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void RealtimeDataSlot(); private: Ui::MainWindow *ui; QTimer m_timer; QChart chart; QSplineSeries m_series; QStringList m_titles; QValueAxis m_axis; qreal m_step; qreal m_x; qreal m_y; }; #endif // MAINWINDOW_H |
mainwindow定义文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include "mainwindow.h" #include "ui_mainwindow.h" #include "QTime" #include "QDebug" #include "qmath.h" #include "QValueAxis" #include "QDateTimeAxis" #include "QRandomGenerator" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle("动态正弦波形图"); connect(&m_timer,SIGNAL(timeout()),this,SLOT(RealtimeDataSlot())); m_timer.setInterval(1000); m_x=0; m_y=0; chart.setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题 chart.setTitle("动态正弦波形图");//设置标题 chart.setTitleFont(QFont("微软雅黑",10)); chart.legend()->hide(); QPen green(Qt::yellow); green.setWidth(2); m_series.setPen(green); m_series.append(m_x, m_y); chart.addSeries(&m_series); chart.createDefaultAxes(); chart.setAxisX(&m_axis,&m_series); m_axis.setTickCount(5); chart.axisX()->setRange(0,10); chart.axisY()->setRange(-1, 1); QChartView *chartView = new QChartView(&chart); QGridLayout *baseLayout = new QGridLayout(); //便于显示,创建网格布局 chartView->setRenderHint(QPainter::Antialiasing); baseLayout->addWidget(chartView, 0, 0); ui->widgetWaveForm->setLayout(baseLayout); //显示到QWidget控件 m_timer.start(); } void MainWindow::RealtimeDataSlot() { qreal x = chart.plotArea().width()/m_axis.tickCount(); qreal y = 10/m_axis.tickCount(); m_x += y; m_y=sin(m_x); m_series.append(m_x, m_y); chart.scroll(x/2, 0); /*if (m_x == 100) m_timer.stop();*/ } MainWindow::~MainWindow() { delete ui; } |