当前位置: 首页 > news >正文

Qt QVCandlestickModelMapper详解

1、概述

QVCandlestickModelMapper 是 Qt 图表模块(Qt Charts)中的一个类,用于在数据模型(QAbstractItemModel 派生类)和垂直方向的烛台图(QCandlestickSeries)之间建立映射关系。

它作为数据模型和烛台图表之间的桥梁,允许开发者将模型中的数据轻松地可视化成金融领域常用的烛台图形式,无需手动处理数据同步问题。当数据模型中的数据发生变化时,烛台图会自动更新,反之亦然。

QVCandlestickModelMapper 特别适合处理按列组织的金融时间序列数据,其中每列代表烛台图的一个特定属性(开盘价、最高价、最低价、收盘价等)。

2、重要方法

  • void setModel(QAbstractItemModel *model):设置数据模型,所有烛台数据将从此模型中获取

  • QAbstractItemModel *model() const:返回当前使用的数据模型

  • void setSeries(QCandlestickSeries *series):设置要关联的烛台序列

  • QCandlestickSeries *series() const:返回当前关联的烛台序列

  • void setTimestampColumn(int column):设置时间戳数据所在的列索引

  • int timestampColumn() const:返回时间戳数据所在的列索引

  • void setOpenColumn(int column):设置开盘价数据所在的列索引

  • int openColumn() const:返回开盘价数据所在的列索引

  • void setHighColumn(int column):设置最高价数据所在的列索引

  • int highColumn() const:返回最高价数据所在的列索引

  • void setLowColumn(int column):设置最低价数据所在的列索引

  • int lowColumn() const:返回最低价数据所在的列索引

  • void setCloseColumn(int column):设置收盘价数据所在的列索引

  • int closeColumn() const:返回收盘价数据所在的列索引

  • void setFirstRow(int firstRow):设置要显示的第一行数据的索引

  • int firstRow() const:返回当前显示的第一行数据的索引

  • void setRowCount(int rowCount):设置要显示的数据行数

  • int rowCount() const:返回当前显示的数据行数

3、信号

  • void modelReplaced():当数据模型被替换时发射此信号
  • void seriesReplaced():当烛台序列被替换时发射此信号
  • void timestampColumnChanged():当时间戳列索引改变时发射此信号
  • void openColumnChanged():当开盘价列索引改变时发射此信号
  • void highColumnChanged():当最高价列索引改变时发射此信号
  • void lowColumnChanged():当最低价列索引改变时发射此信号
  • void closeColumnChanged():当收盘价列索引改变时发射此信号
  • void firstRowChanged():当起始行索引改变时发射此信号
  • void rowCountChanged():当显示的行数改变时发射此信号

4、常用枚举

QVCandlestickModelMapper 本身没有定义枚举类型,但它与 QCandlestickSet 中定义的数据角色配合使用:

  • QCandlestickSet::TimestampRole:时间戳数据角色
  • QCandlestickSet::OpenRole:开盘价数据角色
  • QCandlestickSet::HighRole:最高价数据角色
  • QCandlestickSet::LowRole:最低价数据角色
  • QCandlestickSet::CloseRole:收盘价数据角色

这些角色对应烛台图的基本组成部分,QVCandlestickModelMapper 通过映射这些角色来构建烛台图表。

5、C++ 实例

#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
#include <QLegend>
#include <QPieSlice>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建主窗口和布局QWidget window;QVBoxLayout *mainLayout = new QVBoxLayout(&window);// 1. 准备数据模型 - 以垂直方式组织数据,每列代表一个K线周期QStandardItemModel *model = new QStandardItemModel(&window);model->setRowCount(5); // 有5行,分别存储时间戳、开盘价、最高价、最低价、收盘价model->setColumnCount(3); // 有3列,代表3个不同的K线周期(例如3天的数据)model->setHeaderData(0, Qt::Horizontal, "Day 1");model->setHeaderData(1, Qt::Horizontal, "Day 2");model->setHeaderData(2, Qt::Horizontal, "Day 3");// 定义数据:每个数据块代表一个K线周期(一天)// 第0行: 时间戳 (需要转换为QDateTime)model->setData(model->index(0, 0), QDateTime(QDate(2023, 10, 1), QTime(0, 0)));model->setData(model->index(0, 1), QDateTime(QDate(2023, 10, 2), QTime(0, 0)));model->setData(model->index(0, 2), QDateTime(QDate(2023, 10, 3), QTime(0, 0)));// 第1行: 开盘价 (Open)model->setData(model->index(1, 0), 100.0);model->setData(model->index(1, 1), 105.0);model->setData(model->index(1, 2), 98.0);// 第2行: 最高价 (High)model->setData(model->index(2, 0), 110.0);model->setData(model->index(2, 1), 112.0);model->setData(model->index(2, 2), 102.0);// 第3行: 最低价 (Low)model->setData(model->index(3, 0), 95.0);model->setData(model->index(3, 1), 98.0);model->setData(model->index(3, 2), 94.0);// 第4行: 收盘价 (Close)model->setData(model->index(4, 0), 105.0);model->setData(model->index(4, 1), 108.0);model->setData(model->index(4, 2), 100.0);// 创建表格视图以显示模型数据(可选,用于调试和查看)QTableView *tableView = new QTableView;tableView->setModel(model);mainLayout->addWidget(tableView);// 2. 创建蜡烛图系列QCandlestickSeries *candlestickSeries = new QCandlestickSeries();candlestickSeries->setName("Daily Stock Prices");candlestickSeries->setIncreasingColor(QColor(Qt::green)); // 上涨为绿色candlestickSeries->setDecreasingColor(QColor(Qt::red));   // 下跌为红色// 3. 创建垂直模型映射器并设置映射关系QVCandlestickModelMapper *mapper = new QVCandlestickModelMapper();mapper->setModel(model);mapper->setSeries(candlestickSeries);// 关键:设置模型中的哪些行对应蜡烛图的哪些值mapper->setTimestampRow(0);  // 第0行是时间戳mapper->setOpenRow(1);       // 第1行是开盘价mapper->setHighRow(2);       // 第2行是最高价mapper->setLowRow(3);        // 第3行是最低价mapper->setCloseRow(4);      // 第4行是收盘价// 设置要映射的数据列范围(从第0列开始,到第2列结束,共3个蜡烛图项)mapper->setFirstSetColumn(0);mapper->setLastSetColumn(2);// 4. 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(candlestickSeries);chart->setTitle("QVCandlestickModelMapper Example - Stock Price");chart->setAnimationOptions(QChart::SeriesAnimations);// 5. 创建坐标轴// 时间轴作为X轴QDateTimeAxis *axisX = new QDateTimeAxis;axisX->setFormat("yyyy-MM-dd");axisX->setTitleText("Date");chart->addAxis(axisX, Qt::AlignBottom);candlestickSeries->attachAxis(axisX);// 价格轴作为Y轴QValueAxis *axisY = new QValueAxis;axisY->setTitleText("Price");chart->addAxis(axisY, Qt::AlignLeft);candlestickSeries->attachAxis(axisY);// 6. 创建图表视图QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);mainLayout->addWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}

点击扫码加入群聊

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

http://www.dtcms.com/a/389189.html

相关文章:

  • LeetCode:20.旋转图像
  • 网络协议深度解析:从OSI七层模型到现代互联网通信的技术实战
  • 慈明学校以孝治家阳光家庭教育中心 学以致用践行以孝治家幸福万家
  • 开心实习之 深度学习之多层感知机
  • 前端构造数据格式及表格添加行
  • 深度学习-神经网络(上篇)
  • 【脑电分析系列】第18篇:传统机器学习在EEG中的应用 — SVM、LDA、随机森林等分类器
  • 理解长短期记忆神经网络(LSTM)
  • Kurt-Blender零基础教程:第2章:建模篇——第1节:点线面的选择与控制与十大建模操作
  • 鸿蒙5.0应用开发——V2装饰器@Monitor的使用
  • 八、Java-XML
  • 计算机在医疗领域应用的独特技术问题分析
  • HTB Intentions writeup(SQL二次注入也是注入)
  • 第一章 预训练:让模型“博闻强识”
  • 【数组】求两个匀速运动质点的相交或最小距离
  • 新手向:Python爬虫原理详解,从零开始的网络数据采集指南
  • OKZOO进军HealthFi:承接AIoT,引领Health-to-Earn
  • Halcon 相机标定
  • 腾讯混元发布集成翻译模型Hunyuan-MT-Chimera-7B,已开放体验
  • mybatis-plus扩展
  • 从x.ai到VSCode:一个AI编程助手的意外之旅
  • SQLite vs MySQL:核心SQL语法差异全面解析
  • 【每日算法】两数相加 LeetCode
  • ActiveMQ底层原理与性能优化
  • Ceph IO流程分段上传(1)——InitMultipart
  • 大数据毕业设计选题推荐-基于大数据的农作物产量数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 【回归之作】学校实训作业:Day04面向对象思想编程
  • Ubuntu20.04或者Ubuntu24.04 TypeC-连接屏幕不显示问题
  • 【SQLSERVER】SQL Server 表导出与导入
  • postgresql和mongodb谁的地位更高