Qt QChart實現(xiàn)折線圖的繪制
前言
QChart 是常用的圖表;我這里做了一個 default 和 custom
1.使用
Qt5.9及以上版本;
pro文件中添加QT += charts
.在使用QChart的各個控件之前,必須先聲明一個命名空間。如:
QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE
QChart和QChartView的關(guān)系:
QChart和QChartView的關(guān)系類似于QGraphicsScene和QGraphicsView的關(guān)系,QChart本身是用來存放需要展示的控件的類,而QChartView則是用于人眼識別觀察的入口。
所有的更改都是在QChart上發(fā)生的,不過更改的結(jié)果是通過QChartView來進行展示的
2.效果如下

3.具體實現(xiàn)如下
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(); //創(chuàng)建折線系列
QChartView *chartView = new QChartView(this);
/*為系列里添加100個數(shù)據(jù)*/
for(quint8 i=0; i<100; i++)
{
lineSeries->append(i,qrand()%300);
}
lineSeries->setName("red line"); //設(shè)置系列名稱
QChart * mChart = new QChart(); //創(chuàng)建圖標(biāo)對象
mChart->addSeries(lineSeries); //向圖表中添加系列
mChart->createDefaultAxes(); //創(chuàng)建默認(rèn)的坐標(biāo),必須在addSeries之后調(diào)用
mChart->setTheme(QChart::ChartThemeDark); //設(shè)置圖標(biāo)主題
mChart->setTitle("qrand"); //設(shè)置圖標(biāo)名稱
// mChart->legend()->hide(); //隱藏圖例,也就是不顯示系列名稱了
chartView->setChart(mChart); //向chartView中添加圖標(biāo)
chartView->resize(QSize(500,300)); //重新設(shè)置chartView的大小
chartView->setRenderHints(QPainter::Antialiasing);//消除邊緣,看起來平滑一些
ui->horizontalLayout->addWidget(chartView); //把chartView放到水平布局中(在ui中拖一個水平布局)
}
void MainWindow::on_pushButton_2_clicked()
{
QLineSeries *lineSeries = new QLineSeries(); //創(chuàng)建折線系列
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); //設(shè)置坐標(biāo)軸范圍
axisX->setTickCount(5); //主分隔個數(shù)
axisX->setMinorTickCount(2);//4
mChart->addAxis(axisX,Qt::AlignLeft ); //坐標(biāo)軸添加到圖表,并指定方向
lineSeries->attachAxis(axisX); //序列 series0 附加坐標(biāo)軸
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
//更新系列中的數(shù)據(jù) 注意:不需要將該系列從圖表中移除
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; });到此這篇關(guān)于Qt QChart實現(xiàn)折線圖的繪制的文章就介紹到這了,更多相關(guān)Qt QChart折線圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景
這篇文章主要介紹了實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景,文章最后的適用性部分則介紹了一些State模式善于處理的情況,需要的朋友可以參考下2016-03-03
C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
以下是對C語言中字符串常用函數(shù)strcat與strcpy的使用方法進行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07
C++實現(xiàn)LeetCode(41.首個缺失的正數(shù))
這篇文章主要介紹了C++實現(xiàn)LeetCode(41.首個缺失的正數(shù)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

