我们先创建一个工程,然后在界面上放置一个Graphics Widget组件,在组件上点击鼠标右键,选择提升为...
提升的类的名称我们写为QChartView
下面我们贴下主要代码
zx.pro
#-------------------------------------------------
#
# Project created by QtCreator 2022-02-13T18:15:06
#
#-------------------------------------------------
QT += core gui charts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = zx
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtCharts>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//实例化一个QChart对象
QChart *chart = new QChart;
chart->setTitle("GDP增长图"); //设置标题
ui->graphicsView->setChart(chart); //将QChart对象设置到QChartView图表上
//设置坐标轴
QValueAxis* axisX = new QValueAxis;
axisX->setTitleText("年份"); //设置标题
axisX->setRange(1960, 2020); //设置范围
axisX->setTickCount(7); //设置主刻度个数
axisX->setLineVisible(true); //设置轴线和刻度线可见性
axisX->setGridLineVisible(false); //设置网格线可见性
QValueAxis* axisY = new QValueAxis;
axisY->setTitleText("GDP(万亿:美元)"); //设置标题
axisY->setRange(0, 20); //设置范围
axisY->setTickCount(21); //设置主刻度个数
axisY->setLineVisible(true); //设置轴线和刻度线可见性
axisY->setGridLineVisible(false); //设置网格线可见性
//设置序列1
QLineSeries *series = new QLineSeries;
series->setName("中国"); //设置序列名
series->setColor(QColor(255,0,0)); //设置序列颜色
//添加数据点到序列
series->append(1960, 0.06);
series->append(1965, 0.07);
series->append(1970, 0.09);
series->append(1975, 0.16);
series->append(1980, 0.19);
series->append(1985, 0.30);
series->append(1990, 0.36);
series->append(1995, 0.73);
series->append(2000, 1.21);
series->append(2005, 2.29);
series->append(2010, 6.09);
series->append(2015, 11.06);
series->append(2020, 14.72);
//设置序列2
QLineSeries *series2 = new QLineSeries;
series2->setName("美国"); //设置序列名称
series2->setColor(QColor(0,0,255)); //设置序列颜色
//添加数据点到序列
series2->append(1960, 0.54);
series2->append(1965, 0.74);
series2->append(1970, 1.07);
series2->append(1975, 1.68);
series2->append(1980, 2.85);
series2->append(1985, 4.34);
series2->append(1990, 5.96);
series2->append(1995, 7.64);
series2->append(2000, 10.25);
series2->append(2005, 13.04);
series2->append(2010, 15.00);
series2->append(2015, 18.24);
series2->append(2020, 20.93);
//设置序列3
QLineSeries *series3 = new QLineSeries;
series3->setName("印度"); //设置序列名称
series3->setColor(QColor(128,128,128)); //设置序列颜色
//添加数据点到序列
series3->append(1960, 0.03);
series3->append(1965, 0.06);
series3->append(1970, 0.06);
series3->append(1975, 0.10);
series3->append(1980, 0.18);
series3->append(1985, 0.23);
series3->append(1990, 0.32);
series3->append(1995, 0.36);
series3->append(2000, 0.47);
series3->append(2005, 0.82);
series3->append(2010, 1.67);
series3->append(2015, 2.10);
series3->append(2020, 2.62);
//设置序列4
QLineSeries *series4 = new QLineSeries;
series4->setName("日本"); //设置序列名称
series4->setColor(QColor(144,238,144)); //设置序列颜色
//添加数据点到序列
series4->append(1960, 0.04);
series4->append(1965, 0.09);
series4->append(1970, 0.21);
series4->append(1975, 0.52);
series4->append(1980, 1.10);
series4->append(1985, 1.40);
series4->append(1990, 3.13);
series4->append(1995, 5.55);
series4->append(2000, 4.97);
series4->append(2005, 4.83);
series4->append(2010, 5.76);
series4->append(2015, 4.44);
series4->append(2020, 5.06);
//给Qchart添加序列
chart->addSeries(series);
chart->addSeries(series2);
chart->addSeries(series3);
chart->addSeries(series4);
//把序列设置到坐标轴
chart->setAxisX(axisX, series);
chart->setAxisY(axisY, series);
chart->setAxisX(axisX, series2);
chart->setAxisY(axisY, series2);
chart->setAxisX(axisX, series3);
chart->setAxisY(axisY, series3);
chart->setAxisX(axisX, series4);
chart->setAxisY(axisY, series4);
}
Widget::~Widget()
{
delete ui;
}
效果图