qt绘制折线图(可滑动查看数据)

文章目录

  • 1. 准备
  • 2. 测试代码

1. 准备

在.pro文件下添加:

QT   += charts

在对应cpp文件内包含相关头文件,我做测试用,直接在main.cpp里测试了

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 


QT_CHARTS_USE_NAMESPACE

在使用Qt Charts模块时,必须将其相关的类包含在QtCharts命名空间中。为了简化代码的书写,可以在文件的开头添加QT_CHARTS_USE_NAMESPACE预处理指令,它会自动为代码中使用的Qt Charts类添加命名空间前缀。

2. 测试代码

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建折线图数据
    QLineSeries *series = new QLineSeries();

    // 初始化折线图数据,只添加前10个数据点
    for (int i = 0; i < 10; ++i) {
        // 假设数据为 (i,i+1),对应x,y轴
        series->append(i, i +1);
    }

    // 创建图表,并添加折线图数据
    QChart *chart = new QChart();
    chart->addSeries(series);//将折线添加到图表

    // 创建坐标轴
    QValueAxis *axisX = new QValueAxis();
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0,50);//y轴范围设置
    chart->setAxisX(axisX, series);
    chart->setAxisY(axisY, series);
    series->setName("折线图测试");
    // 创建主窗口
    QMainWindow window;
    // 创建图表视图
    QChartView *chartView = new QChartView(chart);
    // 创建拖动条控件
    QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
    scrollBar->setRange(0, 20); // 设置范围为数据总数减去每页显示的数据个数
    // 创建图表视图和拖动条的容器
    QWidget *container = new QWidget();
    QVBoxLayout *containerLayout = new QVBoxLayout();//垂直布局
    containerLayout->addWidget(chartView);//
    containerLayout->addWidget(scrollBar);//将图表与拖条垂直分布
    container->setLayout(containerLayout);//放置进容器
    // 创建主窗口布局
    QVBoxLayout *layout = new QVBoxLayout();
    layout->addWidget(container);

    // 将布局设置给主窗口
    QWidget *centralWidget = new QWidget(&window);
    centralWidget->setLayout(layout);
    window.setCentralWidget(centralWidget);
    window.resize(400, 300);
    window.show();

    // 连接拖动条的值改变信号到自定义的槽函数
    QObject::connect(scrollBar, &QScrollBar::valueChanged, [&chartView, series](int value) {
        int viewportRange = 10; // 视口范围,即当前显示的数据数量
        // 根据拖动条的值计算视口范围的起始索引
        int startIndex = value;
        int endIndex = value + viewportRange - 1;
        // 清除折线图数据
        series->clear();
        // 添加当前视口范围内的数据
        for (int i = startIndex; i <= endIndex; ++i) {
            series->append(i, i +1);
        }
        // 重新设置图表视图的范围
        qreal minX = startIndex;
        qreal maxX = endIndex;
        chartView->chart()->axisX()->setRange(minX, maxX);
        chartView->chart()->axisX(series)->setRange(minX,maxX);
    });
     return a.exec();
}

qt绘制折线图(可滑动查看数据)_第1张图片

滑动拖条
qt绘制折线图(可滑动查看数据)_第2张图片

你可能感兴趣的:(QT上位机界面,qt,开发语言)