QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点
- 功能介绍
- 头文件
- C文件
- 运行过程
功能介绍
上面的代码实现了一个简单的 Qt 应用程序,其功能包括:
-
创建一个
MainWindow
类,继承自QMainWindow
,作为应用程序的主窗口。 -
在主窗口中添加了一个图表 (
QChart
) 和一个图表视图 (QChartView
),用于显示图表内容。 -
在图表中添加了一个线系列 (
QLineSeries
),用于绘制数据点。 -
设置了图表的 X 轴和 Y 轴范围、颜色和标题。
-
使用
QTimer
创建了一个定时器,每隔5秒触发一次addPoint()
槽函数。 -
在
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);
}