QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

发布于:2024-03-29 ⋅ 阅读:(23) ⋅ 点赞:(0)

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

功能介绍

上面的代码实现了一个简单的 Qt 应用程序,其功能包括:

  1. 创建一个 MainWindow 类,继承自 QMainWindow,作为应用程序的主窗口。

  2. 在主窗口中添加了一个图表 (QChart) 和一个图表视图 (QChartView),用于显示图表内容。

  3. 在图表中添加了一个线系列 (QLineSeries),用于绘制数据点。

  4. 设置了图表的 X 轴和 Y 轴范围、颜色和标题。

  5. 使用 QTimer 创建了一个定时器,每隔5秒触发一次 addPoint() 槽函数。

  6. addPoint() 槽函数中,生成了一个随机的 x 坐标和 y 坐标,并将它们添加到线系列中,以实现动态添加点的效果。

头文件

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>
#include <QChartView>
#include <QSplineSeries>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void addPoint();

private:
    Ui::MainWindow *ui;
    QTimer *timer;
    QLineSeries *series1;
    QChart *chart;
};

#endif // MAINWINDOW_H

C文件

// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRandomGenerator>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QValueAxis *xAxis = new QValueAxis();
    xAxis->setRange(-10, 10);
    xAxis->setLabelsColor(QColor(255, 0, 0));
    xAxis->setTitleText("X");

    QValueAxis *yAxis = new QValueAxis();
    yAxis->setRange(-10, 10);
    yAxis->setLabelsColor(QColor(255,0, 0));
    yAxis->setTitleText("Y");

    series1 = new QLineSeries();
    chart = new QChart();

    chart->legend()->hide();
    chart->addSeries(series1);
    chart->createDefaultAxes();
    chart->setTitle(" www ");
    chart->addAxis(xAxis, Qt::AlignBottom);
    chart->addAxis(yAxis, Qt::AlignLeft);
    series1->attachAxis(xAxis);
    series1->attachAxis(yAxis);
    series1->setColor(QColor(255, 0, 0));
    series1->setUseOpenGL();

    QChartView *chartView = new QChartView(chart);
    chartView->setChart(chart);
    chartView->setRubberBand(QChartView::RectangleRubberBand);
    chartView->setRenderHint(QPainter::Antialiasing,true);
    this->setCentralWidget(chartView);

    // 设置定时器
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(addPoint()));
    timer->start(1000); // 每隔5秒触发timeout()信号
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::addPoint()
{
    // 添加随机点
   int X = QRandomGenerator::global()->bounded(-100, 100 + 1);
   int Y = QRandomGenerator::global()->bounded(-100, 100 + 1);

    series1->append(X, Y);
}

运行过程

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看