文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

QtQChart实现折线图的绘制

2023-05-17 20:15

关注

前言

QChart  是常用的图表;我这里做了一个 default 和 custom

1.使用

Qt5.9及以上版本;

pro文件中添加QT += charts

.在使用QChart的各个控件之前,必须先声明一个命名空间。如:

QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE

QChart和QChartView的关系:

QChart和QChartView的关系类似于QGraphicsScene和QGraphicsView的关系,QChart本身是用来存放需要展示的控件的类,而QChartView则是用于人眼识别观察的入口。

所有的更改都是在QChart上发生的,不过更改的结果是通过QChartView来进行展示的

2.效果如下

3.具体实现如下

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);
 
 
       
 
       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);     
}

4.刷新QChart

//更新系列中的数据  注意:不需要将该系列从图表中移除
    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);

5.PCL 点排序

    //------------------------------排序----------------------------
    std::sort(cloud.begin(), cloud.end(),
        [](pcl::PointXYZ a, pcl::PointXYZ b) {return a.z < b.z; });

到此这篇关于Qt QChart实现折线图的绘制的文章就介绍到这了,更多相关Qt QChart折线图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯