一、示例
在pro文件引入QT += charts
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
//曲线3=====================================================
#include <QtCharts>//显示图表
QT_CHARTS_USE_NAMESPACE
namespace Ui { class Widget; }
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
//创建曲线1、2图表
QChartView *chartView1;
QChart *chart1;
//曲线1=====================================================
void ChartDataOne();
};
#endif
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("系统");//设置程序左上角标题
//曲线1=========================================
ChartDataOne();
}
//曲线1=====================================
void Widget::ChartDataOne(){
//创建图表容器
chartView1 = new QChartView;
//创建图表
chart1 = new QChart;
chart1->setTitle("方位曲线图");//设置标题
//创建曲线
QLineSeries *series1 = new QLineSeries;//创建第一条线
series1->setName("位置主令");//设置第一条线名字
QPen pen1=series1->pen();//画一条曲线
pen1.setWidth(1/2);//设置线宽
pen1.setColor("black");//设置曲线颜色
series1->setPen(pen1);//将曲线
series1->setUseOpenGL(true);//openGl 加速,可以优化曲线锯齿
QLineSeries *series2 = new QLineSeries;
series2->setName("位置反馈");
QPen pen2=series2->pen();
pen2.setWidth(1/2);
pen2.setColor("blue");
series2->setPen(pen2);
series2->setUseOpenGL(true);//openGl 加速,可以优化曲线锯齿
//将曲线放入图表
chart1->addSeries(series1);
chart1->addSeries(series2);
//创建坐标轴
QValueAxis *axisX1=new QValueAxis;//创建X坐标轴
axisX1->setRange(0,10);//设置X坐标范围
axisX1->setTitleText("time/s");//设置坐标标题
QValueAxis *axisY1=new QValueAxis;//创建X坐标轴
axisY1->setRange(-2,2);//设置X坐标范围
axisY1->setTitleText("value");//设置坐标标题
//将曲线与坐标轴放入图表的X与Y轴
chart1->setAxisX(axisX1,series1);
chart1->setAxisY(axisY1,series1);
chart1->setAxisX(axisX1,series2);
chart1->setAxisY(axisY1,series2);
//将图表放入图表容器
chartView1->setChart(chart1);
chartView1->setRenderHint(QPainter::Antialiasing);//给图标容器设置抗锯齿
//创建网格布局才可通过ui方式显示到指定id的widget
QGridLayout *gridBox = new QGridLayout();
gridBox->addWidget(chartView1, 0, 0);//将图表容器放入网格布局中
//将网格布局塞进自己准备好的widget窗口,用ui界面工具画
ui->widget_charts_top->setLayout(gridBox);
//创建数据
qreal t=0,y1,y2,intv=0.1;//qreal是Qt的数据类型,在桌面操作系统中(如Windows等)qreal其实就是double类型;而在嵌入设备系统中,qreal则等同于float 类型。
int icount=100;
for(int i=0;i<icount;i++){
y1=qSin(t);
series1->append(t,y1);//动态设置曲线一数据坐标
y2=qSin(t+10);
series2->append(t,y2);
t=t+intv;
}
}
Widget::~Widget()
{
delete ui;
}
二、常用功能
1、框选放大
功能描述:鼠标左键框选放大曲线图
功能实现:是通过设置QChartView开启鼠标框选放大功能
chartView2 = new QChartView;
//开启鼠标左键框选放大
chartView2->setRubberBand(QChartView::RectangleRubberBand);