QChart柱状图、折线图和散点图图像及X轴刷新

使用QChart需要在*.pro中添加

QT       += charts
在*.h文件中添加使用Qt中预先定义好的宏:

[cpp] view plain copy

QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE
QT_CHARTS_USE_NAMESPACE
或者使用

  1. using namespace QtCharts  
柱状图:
mainwindow.h

#include <QMainWindow>
#include <QDebug>
#include <QWidget>
#include <QtCharts/QChartView>
//#include <QtCharts/QPieSeries>
//#include <QtCharts/QPieSlice>
//#include <QtGui/QResizeEvent>
//  #include <QtWidgets/QGraphicsScene>
#include <QtCharts/QChart>
#include <QtCharts/QLineSeries>
//  #include <QtCharts/QSplineSeries>
//  #include <QtWidgets/QGraphicsTextItem>
#include <QBarCategoryAxis>
#include <QValueAxis>
#include <QBarSeries>
#include <QBarSet>
 
#include <QDebug>
 
QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE
 
QT_CHARTS_USE_NAMESPACE
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    void initChart();
 
private slots:
    void sltpushButton();
    void sltpushButton_2();
    void sltpushButton_3();
    void sltCategoriesChanged();
 
private:
    Ui::MainWindow *ui;
 
    QChart*                         m_typeChart;
    QChartView*                     m_typeView;
    QBarCategoryAxis*               m_typeAxis;
    QValueAxis*                     m_typeAxisY;
    QBarSeries*                     m_barSeries;
    QBarSet*                        m_barSet;
 
};

 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initChart();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::initChart()
{
    m_typeChart = new QChart();
    m_typeChart->setAnimationOptions(QChart::SeriesAnimations);//动画效果
 
    m_barSet = new QBarSet("eg");//创建条,可以创建多个
    m_barSet->setLabelColor(QColor(0,0,0));
 
    m_barSeries = new QBarSeries(m_typeChart);
    m_barSeries->setLabelsVisible(true);//判断是否在图柱上显示数值
    m_barSeries->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);//在柱上显示数值方式
    m_typeChart->addSeries(m_barSeries);
    m_typeChart->setTitle("XXXX");
 
    m_typeAxis = new QBarCategoryAxis();//创建X轴
    m_typeChart->createDefaultAxes();
    m_typeChart->setAcceptTouchEvents(true);
    m_typeChart->setAxisX(m_typeAxis, m_barSeries);
 
    m_typeAxisY = new QValueAxis;//创建Y轴
    m_typeAxisY->setRange(0, 10);//显示数值范围
    m_typeAxisY->setTickCount(10);     //设置多少格
//        m_typeAxisY->setLabelFormat("%u"); //设置刻度的格式  
//        m_typeAxisY->setTitleText("AxisY"); //设置Y轴标题  
//        m_typeAxisY->setGridLineVisible(true); //设置是否显示网格线
    m_typeAxisY->setMinorTickCount(5); //设置每格小刻度数目
 
    m_typeChart->setAxisY(m_typeAxisY, m_barSeries);
 
    m_typeChart->legend()->setVisible(true);
    m_typeChart->legend()->setAlignment(Qt::AlignBottom);
    m_typeChart->legend()->hide();
    m_typeView = new QChartView();
    m_typeView->setChart(m_typeChart);
    m_typeView->setRubberBand(QChartView::RectangleRubberBand);//拉伸效果
    m_typeView->setRenderHint(QPainter::Antialiasing);
 
    m_typeView->chart()->setTheme(QChart::ChartThemeBrownSand);
    QPalette pal = window()->palette();
    pal.setColor(QPalette::Window, QRgb(0x9e8965));
    pal.setColor(QPalette::WindowText, QRgb(0x404044));
    window()->setPalette(pal);
    ui->widget->layout()->addWidget(m_typeView);
 
    sltpushButton();
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(sltpushButton_2()));
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(sltpushButton_3()));
    connect(m_typeAxis, SIGNAL(categoriesChanged()), this, SLOT(sltCategoriesChanged()));//QValueAxis改变是会触发信号
}
 
void MainWindow::sltpushButton()
{
    *m_barSet << 1 << 2 << 3 << 4 << 5 << 6;
    m_barSeries->append(m_barSet);
    QStringList categories;
    categories  << "Feb" << "Mar" << "Apr" << "May" << "Jun" << "Jan";
    m_typeAxis->append(categories);//
}
 
void MainWindow::sltpushButton_2()
{
    m_typeAxis->clear();
}
/*****************
不适用触发信号barSeries不刷新 eg.sltpushButton_3
*******************/
void MainWindow::sltpushButton_3()
{
    //     m_typeAxis->clear();
    //     m_barSeries->clear();
    //    m_barSet = new QBarSet("eg");
    //    m_barSet->setLabelColor(QColor(0,0,0));
    //    *m_barSet << 3 << 4 << 5 << 6<< 1 << 2;
    //    m_barSeries->append(m_barSet);
    //    QStringList categories;
    //    categories << "A" << "B" << "C"<< "D" << "E" << "F";
    //    m_typeAxis->append(categories);
}
void MainWindow::sltCategoriesChanged()
{
    m_barSeries->clear();//因为下边会重新添加新的X轴所以会触发两次因此需要清空QBarSeries
    m_barSet = new QBarSet("eg");//需要重新创建一个柱
    m_barSet->setLabelColor(QColor(0,0,0));
    *m_barSet<< 2 << 3 << 4 << 5 << 6<<1;
    m_barSeries->append(m_barSet);
    QStringList categories;
    categories  << "1" << "2" << "3" << "4"<< "5"<< "6" ;
    m_typeAxis->append(categories);
}
代码下载http://download.csdn.net/download/u010304326/10227887

接线图结合散点图

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QtCharts/QChartView>
//#include <QtCharts/QPieSeries>
//#include <QtCharts/QPieSlice>
//#include <QtGui/QResizeEvent>
#include <QtCharts/QChart>
  #include <QtCharts/QScatterSeries>
  #include <QtCharts/QLineSeries>
//  #include <QtCharts/QSplineSeries>
//  #include <QtWidgets/QGraphicsTextItem>
#include <QBarCategoryAxis>
#include <QValueAxis>
#include <QBarSeries>
#include <QBarSet>
#include <QDebug>
 
QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE
 
QT_CHARTS_USE_NAMESPACE
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    void initline();
 
private slots:
    void sltpushButton();
    void sltpushButton_2();
    void sltpushButton_3();
    void sltCategoriesChanged();
 
private:
    Ui::MainWindow *ui;
    QChart*                     m_chart;
    QLineSeries*                m_lineSeries;
    QScatterSeries*             m_scatterSeries;
    QBarCategoryAxis*           m_axis;
    QValueAxis*                 m_axisY;
    QChartView*                 m_chartView;
    QList<int>                  m_list;
 
};
 
#endif // MAINWINDOW_H
 
mainwindow.cpp 

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initline();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::initline()
{
    m_chart = new QChart();
    m_chart->setAnimationOptions(QChart::SeriesAnimations);
    m_lineSeries = new QLineSeries(m_chart);//创建折线
    m_lineSeries->setPen(QPen(Qt::lightGray,2,Qt::SolidLine));
    m_lineSeries->setColor(QColor(248, 167, 0));
    //     m_lineSeries->setPointLabelsVisible(true);
    m_scatterSeries = new QScatterSeries(m_chart);//创建散点
    m_scatterSeries->setMarkerShape(QScatterSeries::MarkerShapeRectangle);//设置散点样式
    m_scatterSeries->setMarkerSize(15);//设置散点大小
    m_chart->addSeries(m_lineSeries);
    m_chart->addSeries(m_scatterSeries);
    m_chart->setTitle("xxxx");
 
    *m_lineSeries << QPointF(0, 5) << QPointF(3, 0) << QPointF(7, 6) << QPointF(9, 7) << QPointF(10, 6);
    *m_scatterSeries<< QPointF(0, 5) << QPointF(3, 0) << QPointF(7, 6) << QPointF(9, 7) << QPointF(10, 6);
 
    QStringList list;
    list<<"0"<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<"12"<<"13";
    m_axis = new QBarCategoryAxis();
    m_axis->append(list);//
    m_chart->createDefaultAxes();
    //    m_chart->setAcceptHoverEvents(true);
    m_chart->setAcceptTouchEvents(true);
    m_chart->setAxisX(m_axis, m_lineSeries);
    m_chart->setAxisX(m_axis, m_scatterSeries);
 
    m_axisY = new QValueAxis;
    m_axisY->setRange(0, 10);
    //    m_axisY->setLabelFormat("%u"); //设置刻度的格式
    //    m_axisY->setGridLineVisible(true);
    m_axisY->setTickCount(10);     //设置多少格
    m_axisY->setMinorTickCount(5); //设置每格小刻度线的数目
    m_chart->setAxisY(m_axisY, m_lineSeries);
    m_chart->setAxisY(m_axisY, m_scatterSeries);
    m_chart->legend()->setVisible(true);
    m_chart->legend()->setAlignment(Qt::AlignBottom);
    m_chart->legend()->hide();
    m_chartView = new QChartView(m_chart);
    m_chartView->setRenderHint(QPainter::Antialiasing);
 
    m_chartView->chart()->setTheme(QChart::ChartThemeBrownSand);
 
    QPalette pal = window()->palette();
    pal.setColor(QPalette::Window, QRgb(0x9e8965));
    pal.setColor(QPalette::WindowText, QRgb(0x404044));
    window()->setPalette(pal);
    ui->widget->layout()->addWidget(m_chartView);
    m_list<<2<<3<<5<<4;
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(sltpushButton_2()));
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(sltpushButton_3()));
    connect(m_axis, SIGNAL(categoriesChanged()), this, SLOT(sltCategoriesChanged()));
 
}
 
void MainWindow::sltpushButton()
{
}
void MainWindow::sltpushButton_2()
{
    m_axis->clear();
}
 
void MainWindow::sltpushButton_3()
{
 
}
void MainWindow::sltCategoriesChanged()
{
    m_lineSeries->clear();
    m_scatterSeries->clear();
    for(int i = 0 ; i<m_list.count(); i++)
    {
        m_lineSeries->append(i,m_list.at(i));
        m_scatterSeries->append(i,m_list.at(i));
    }
    QStringList categories;
    categories << "A" << "B" << "C"<< "D" << "E" << "F";
    m_axis->append(categories);//
}

代码下载:http://download.csdn.net/download/u010304326/10227980







  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值