Qt中使用QtCharts实时绘制雷达点云散点图
作者:互联网
一、Qt Charts组件安装
在Qt安装时勾选Qt Charts组件,该组件包含相关二维图表绘制组件,此处必须勾选。
Qt Data Visualization包含相关三维图形绘制组件,后续想用三维图形绘制可以勾选安装。
二、准备
1、在项目的.pro文件中加上 QT += charts
QT += charts
2、引用头文件及名字空间
#include <QChartView>
#include <QtCharts>
#include <QtCharts/QScatterSeries>
QT_CHARTS_USE_NAMESPACE
三、ui设计
两个按钮用于启动UDP线程,接收雷达数据,一个widget用于放置散点图表。
四、头文件代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QPointF>
#include <QChartView>
#include <QtCharts>
#include <QtCharts/QScatterSeries>
#include <QMetaType>
#include "udpthread.h"
#define PI 3.1415
typedef QVector<float> MY_BUF ;
QT_CHARTS_USE_NAMESPACE
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 on_pushButton_start_clicked();
void on_pushButton_stop_clicked();
void drawPoint(MY_BUF,MY_BUF);
private:
Ui::MainWindow *ui;
void initMap();
udpThread UDPthread;
QChart *m_chart;
QScatterSeries *m_scatterSeries; //散点类型
};
#endif // MAINWINDOW_H
五、源文件代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qRegisterMetaType<MY_BUF>("MY_BUF");
initMap();
this->setWindowTitle("UDP_Reciver");
//UDP线程接收雷达点云数据,通过信号实时刷新绘图
connect(&UDPthread,SIGNAL(pointdata(MY_BUF,MY_BUF)),this,SLOT(drawPoint(MY_BUF,MY_BUF)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initMap()
{
m_chart = new QChart();
m_scatterSeries = new QScatterSeries(m_chart);
m_scatterSeries->setUseOpenGL(true); //启用OpenGL,否则可能会很卡顿
m_scatterSeries->setMarkerShape(QScatterSeries::MarkerShapeRectangle);//设置散点样式
m_scatterSeries->setMarkerSize(4); //设置散点大小
m_scatterSeries->setColor(QColor(0,0,255)); //设置散点颜色
m_chart->addSeries(m_scatterSeries);
m_chart->createDefaultAxes();
m_chart->axes(Qt::Horizontal).first()->setRange(-55.0, 55.0); //设置水平坐标范围
m_chart->axes(Qt::Vertical).first()->setRange(0, 50.0); //设置垂直坐标范围
m_chart->legend()->hide(); //隐藏图例
ui->widget->setChart(m_chart);
ui->widget->setRubberBand(QChartView::RectangleRubberBand); //拉伸效果
ui->widget->chart()->setAnimationOptions(QChart::AllAnimations);
}
//绘制散点
void MainWindow::drawPoint(MY_BUF bufX,MY_BUF bufY)
{
QList<QPointF> listPoint;
m_scatterSeries->clear();
for (int i = 0;i < bufX.count();i++ )
{
QPointF pointf;
pointf.setX(bufX[i]);
pointf.setY(bufY[i]);
listPoint << pointf;
}
m_scatterSeries->replace(listPoint); //更新散点
}
void MainWindow::on_pushButton_start_clicked()
{
if(!UDPthread.isRunning())
{
UDPthread.start();
}
ui->pushButton_start->setEnabled(false);
ui->pushButton_stop->setEnabled(true);
}
void MainWindow::on_pushButton_stop_clicked()
{
if(UDPthread.isRunning())
{
UDPthread.stop();
}
ui->pushButton_start->setEnabled(true);
ui->pushButton_stop->setEnabled(false);
}
六、效果展示
七、最后
后续会有利用 Qt Data Visualization绘制三维点云图,及QT + VS2019 + PCL + VTK的环境搭建,利用QVTKWidget绘制PCL电压的相关内容。
新人上路,谢谢关注!
标签:Qt,MY,散点图,chart,QtCharts,ui,include,BUF,MainWindow 来源: https://blog.csdn.net/qq_41632571/article/details/118424454