这篇文章主要讲解了“Qt QChart怎么实现折线图的绘制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Qt QChart怎么实现折线图的绘制”吧!
Qt5.9及以上版本;
pro文件中添加QT += charts
.在使用QChart的各个控件之前,必须先声明一个命名空间。如:
QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE
QChart和QChartView的关系:
QChart和QChartView的关系类似于QGraphicsScene和QGraphicsView的关系,QChart本身是用来存放需要展示的控件的类,而QChartView则是用于人眼识别观察的入口。
所有的更改都是在QChart上发生的,不过更改的结果是通过QChartView来进行展示的
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QtCharts> #include <QChartView> #include <QSplineSeries> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #pragma execution_character_set("utf-8") MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QLineSeries *lineSeries = new QLineSeries(); //创建折线系列 QChartView *chartView = new QChartView(this); /*为系列里添加100个数据*/ for(quint8 i=0; i<100; i++) { lineSeries->append(i,qrand()%300); } lineSeries->setName("red line"); //设置系列名称 QChart * mChart = new QChart(); //创建图标对象 mChart->addSeries(lineSeries); //向图表中添加系列 mChart->createDefaultAxes(); //创建默认的坐标,必须在addSeries之后调用 mChart->setTheme(QChart::ChartThemeDark); //设置图标主题 mChart->setTitle("qrand"); //设置图标名称 // mChart->legend()->hide(); //隐藏图例,也就是不显示系列名称了 chartView->setChart(mChart); //向chartView中添加图标 chartView->resize(QSize(500,300)); //重新设置chartView的大小 chartView->setRenderHints(QPainter::Antialiasing);//消除边缘,看起来平滑一些 ui->horizontalLayout->addWidget(chartView); //把chartView放到水平布局中(在ui中拖一个水平布局) } void MainWindow::on_pushButton_2_clicked() { QLineSeries *lineSeries = new QLineSeries(); //创建折线系列 QChartView *chartView = new QChartView(this); for(quint8 i=0; i<100; i++) { lineSeries->append(i,qrand()%300); } lineSeries->setName("red line"); QChart * mChart = new QChart(); mChart->addSeries(lineSeries); //mChart->createDefaultAxes(); QValueAxis *axisX = new QValueAxis; axisX->setRange(0, 300); //设置坐标轴范围 axisX->setTickCount(5); //主分隔个数 axisX->setMinorTickCount(2);//4 mChart->addAxis(axisX,Qt::AlignLeft ); //坐标轴添加到图表,并指定方向 lineSeries->attachAxis(axisX); //序列 series0 附加坐标轴 QValueAxis *axisY = new QValueAxis; axisY->setRange( 0, 100); axisY->setTickCount(10); axisY->setMinorTickCount(2);//4 mChart->addAxis(axisY,Qt::AlignBottom); lineSeries->attachAxis(axisY); mChart->setTheme(QChart::ChartThemeDark); lineSeries->setColor(Qt::red); mChart->setTitle("qrand"); chartView->setChart(mChart); chartView->resize(QSize(500,300)); chartView->setRenderHints(QPainter::Antialiasing); ui->horizontalLayout->addWidget(chartView); }
//更新系列中的数据 注意:不需要将该系列从图表中移除 lineSeries->clear(); QList<QPointF> list; int count = cloud.points.size(); std::cout << "new point s count : " << count << " " << std::endl; for (int i = 0; i < count; i+=10) { list << QPointF(cloud.points[i].z, cloud.points[i].y); } lineSeries->replace(list);
//------------------------------排序---------------------------- std::sort(cloud.begin(), cloud.end(), [](pcl::PointXYZ a, pcl::PointXYZ b) {return a.z < b.z; });
感谢各位的阅读,以上就是“Qt QChart怎么实现折线图的绘制”的内容了,经过本文的学习后,相信大家对Qt QChart怎么实现折线图的绘制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。