(链接:Qt:绘制折线图时图标以及坐标轴设置_OceanStar的博客-CSDN博客)
**上链接对应的文章,全网至少有二十个拷贝,但是竟然找不到原创的作者了,我觉这个文章的内容很有价值,所以复刻一次,深入理解一下**
一:原文提到创建GUI应用,选择QMainWindows。
这句话说的太过简略,完整详细说法应该是,在VS2019里面 创建下图所示应用程序。
***
二:原文提到:在.pro中添加:QT += charts
这个不是适用VS2019 开发环境,在VS2019里面增加控件,需要按照下图处理
三:原文提到《在源文件中添加:#include
这个创建完Qt Widgets Application 程序后,会产生好几个文件。
有UI文件,有头文件,有源文件,有main.cpp(这个里面的东西一般不会更改),有qrc(系统资源文件)。
所谓头文件,就是上图红色框内的文件。添加完后的效果是
#pragma once
#include
#include "ui_fuke.h"
#include
class Fuke : public QMainWindow
{
Q_OBJECT
public:
Fuke(QWidget *parent = Q_NULLPTR);
private:
Ui::FukeClass ui;
};
************************************************
四:在构造函数里面添加
QChartView* chartView = new QChartView(this); //创建 ChartView
QChart* chart = new QChart(); //创建 Chart
chart->setTitle("简单函数曲线");
chartView->setChart(chart); //Chart添加到ChartView
this->setCentralWidget(chartView);//setCentralWidget的方法,在QMainWindow的对象中放入widget
运行效果如下
五:
添加对chartView的具体处理代码。(还是在构造函数里面,就是刚才的代码的下面)
// this->
//创建曲线序列
QLineSeries* series0 = new QLineSeries();
QLineSeries* series1 = new QLineSeries();
series0->setName("Sin曲线");
series1->setName("Cos曲线");
chart->addSeries(series0); //序列添加到图表
chart->addSeries(series1);
//序列添加数值
qreal t = 0, y1, y2, intv = 0.1;
int cnt = 100;
for (int i = 0; i < cnt; i++)
{
y1 = qSin(t);
series0->append(t, y1);
y2 = qSin(t + 20);
series1->append(t, y2);
t += intv;
}
//创建坐标轴
QValueAxis* axisX = new QValueAxis; //X 轴
axisX->setRange(0, 10); //设置坐标轴范围
axisX->setTitleText("time(secs)"); //标题
QValueAxis* axisY = new QValueAxis; //Y 轴
axisY->setRange(-2, 2);
axisY->setTitleText("value");
chart->setAxisX(axisX, series0); //为序列设置坐标轴
chart->setAxisY(axisY, series0); //
chart->setAxisX(axisX, series1); //为序列设置坐标轴
chart->setAxisY(axisY, series1); //
运行效果如下,
六:处理乱码问题。
在源代码里面增加:#pragma execution_character_set("utf-8")
七:再次运行一下
**
源代码地址: