QChart笔记6:显示点的值、显示点坐标值

news2024/12/21 18:26:26

在QChart笔记2: 添加鼠标悬停显示和格式处理_qchart 折线图 响应鼠标显示数据-CSDN博客上修改而来。

在笔记2中,通过鼠标悬停的方式显示了坐标轴Y的值,如果要一直显示应该怎么写呢?比如要达到下面的效果。

核心是这句:

series1->setPointLabelsFormat("@yPoint");

pointLabelsFormat :                   

用于显示带有数据点的标签的格式。

QXYSeries 支持以下格式标签:

@xPoint:数据点的 x 坐标。
@yPoint:数据点的 y 坐标。
例如,格式标记的以下用法将生成显示数据点的标签,这些数据点显示在用逗号 (x, y) 分隔的括号内:

series->setPointLabelsFormat("(@xPoint, @yPoint)");
默认情况下,标签的格式设置为@xPoint、@yPoint。标签显示在绘图区域上,绘图区域边缘的标签被剪切。如果这些点彼此靠近,则标签可能会重叠。

相关的函数:

QString

pointLabelsFormat() const

void

setPointLabelsFormat(const QString &format)

通知信号:

void

pointLabelsFormatChanged(const QString &format)

源码:

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QMainWindow>
#include <QChartView>
#include <QPieSeries>
#include <QPieSlice>
#include <QPointF>
#include <QDateTime>
#include <QDate>
#include <QDateTimeAxis>
#include <QDebug>
#include <QSplineSeries>
#include <QToolTip>
#include <QtCharts>

#include "chartview.h"

QChart *chart;
QSplineSeries *series1;
ChartView *chartView;
QScatterSeries *scatterSeries;
void initChart()
{
    //初始化QChart的实例
    chart = new QChart();

    //初始化QSplineSeries的实例
    series1 = new QSplineSeries();
    //设置两条折线的名称
    series1->setName("第一组");

    //把曲线添加到QChart的实例chart中
    chart->addSeries(series1);

    chart->legend()->hide();
    //声明并初始化X轴、两个Y轴
    QDateTimeAxis *axisX = new QDateTimeAxis();
    QValueAxis *axisY_1 = new QValueAxis();
    //设置坐标轴显示的范围
    axisX->setMin(QDateTime(QDate(2022, 6, 6), QTime()));
    axisX->setMax(QDateTime(QDate(2022, 6, 12), QTime()));
    axisX->setTickCount(7);
    axisX->setFormat(QString("yyyy-MM-dd"));
    axisY_1->setMin(0);
    axisY_1->setMax(250);


    //设置坐标轴上的格点
    axisY_1->setTickCount(6);

    //设置坐标轴的颜色,粗细,设置网格
    axisY_1->setLinePenColor(QColor(Qt::darkCyan));
    axisX->setLinePenColor(QColor(Qt::darkCyan));

    axisY_1->setGridLineVisible(true);
    axisY_1->setGridLineColor(QColor(Qt::darkGray));
    axisX->setGridLineVisible(false);


    //把坐标轴添加到chart中,
    //addAxis函数的第二个参数是设置坐标轴的位置,
    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY_1, Qt::AlignLeft);


    //把曲线关联到坐标轴
    series1->attachAxis(axisX);
    series1->attachAxis(axisY_1);

    series1->setPointsVisible(true);
    series1->setPointLabelsVisible();
    series1->setPointLabelsFormat("@yPoint");


    chartView = new ChartView(chart);
    chartView->setChart(chart);
    chartView->setRenderHint(QPainter::Antialiasing);


    QObject::connect(series1, SIGNAL(hovered(const QPointF&,bool)), chartView, SLOT(showPos(const QPointF&, bool)));

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

    initChart();



    QDateTime atnowtime = QDateTime(QDate(2022, 6, 6), QTime());
    series1->append(atnowtime.toMSecsSinceEpoch(), 94.4496);
    QDateTime atnowtime2 = QDateTime(QDate(2022, 6, 7), QTime());
    series1->append(atnowtime2.toMSecsSinceEpoch(), 238.3);
    QDateTime atnowtime3 = QDateTime(QDate(2022, 6, 8), QTime());
    series1->append(atnowtime3.toMSecsSinceEpoch(), 214.5);
    QDateTime atnowtime4 = QDateTime(QDate(2022, 6, 9), QTime());
    series1->append(atnowtime4.toMSecsSinceEpoch(), 226);
    QDateTime atnowtime5 = QDateTime(QDate(2022, 6, 10), QTime());
    series1->append(atnowtime5.toMSecsSinceEpoch(), 209);
    QDateTime atnowtime6 = QDateTime(QDate(2022, 6, 11), QTime());
    series1->append(atnowtime6.toMSecsSinceEpoch(), 137);
    QDateTime atnowtime7 = QDateTime(QDate(2022, 6, 12), QTime());
    series1->append(atnowtime7.toMSecsSinceEpoch(), 90);


    MainWindow w;
    w.setCentralWidget(chartView);

    w.show();
    return a.exec();
}

chartview.h chartview.cpp

#ifndef CHARTVIEW_H
#define CHARTVIEW_H
#include <QtCharts>

class ChartView : public QChartView
{
    Q_OBJECT
public:
    ChartView(QChart *chart, QWidget *parent = 0);


public slots:
    void showPos(const QPointF&, bool);

};


#endif // CHARTVIEW_H


#include "chartview.h"
#include <QDebug>

ChartView::ChartView(QChart *chart, QWidget *parent) : QChartView(chart, parent)
{

}

void ChartView::showPos(const QPointF& point, bool state)
{
    QPointF tempPoint(point.x(), point.y());

    QList<double> yList;
    for (int i=0; i<static_cast<QSplineSeries*>(this->chart()->series().at(0))->points().size(); ++i)
    {
        yList.append(static_cast<QSplineSeries*>(this->chart()->series().at(0))->points().at(i).y());
    }

    double y = point.y();
    if (state)
    {
        for (int i=0; i<yList.count(); ++i)
        {
            if (qFabs(yList.at(i) - y) <= 5)
            {
                QToolTip::showText(QCursor::pos(), QString("%1").arg(yList.at(i)));
                break;
            }
        }
    }
}

如果想同时显示X,Y的值,这样设置

series1->setPointLabelsFormat("@xPoint, @yPoint");

由于这个程序的横轴坐标格式化成了日期,所以显示的效果并不理想。

具体怎么解决这个问题还在探索中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows10安装——制作U盘启动盘(保姆级)

安装前准备&#xff1a; 一个不少于8G的U盘&#xff0c; 一个可以上网的windows电脑&#xff1b; 第一步&#xff1a;安装启动盘制作工具 首先我们下载启动盘制作工具&#xff0c; 官网网址&#xff1a;下载 Windows 10 (microsoft.com)&#xff1b; 百度网盘下载&#xf…

赛氪网受邀参加中国国际科技促进会第五届第五次常务理事扩大会议

2024年7月27日&#xff0c;环球赛乐&#xff08;北京&#xff09;科技有限公司&#xff08;以下简称“赛氪网”&#xff09;受邀参加了中国国际科技促进会第五届第五次常务理事扩大会议。此次会议汇聚了众多科技界的精英和专家&#xff0c;共同探讨科技发展的新方向&#xff0c…

【Mybatis】xml 配置文件

Mybatis的开发有两种方式&#xff1a; 注解XML 使用Mybatis的注解方式&#xff0c;主要是来完成一些简单的增删改查功能。 如果需要实现复杂的SQL功能&#xff0c;建议使用XML来配置映射语句&#xff0c;也就是将SQL语句写在XML配置文件中。在Mybatis中使用XML映射文件方式开…

Cxx primer-chap10-Generic Algorithms

generic algorithms的解释&#xff1a;&#xff0c;具体而言iterator使得算法与容器类型无关&#xff1a;&#xff0c;但算法的实现成功与否有时依赖于&#xff08;element type&#xff09;元素类型&#xff1a;通用算法的实现依赖于iterator&#xff0c;具体而言algorithm –…

python windows环境部署

在官网安装www.python.org linux系统的只能编译安装 windows的可以直接安装 这里是windows安装 .3.9.6版本 一直下一步就可以&#xff0c;然后鼠标右键在按住shift用终端打开 输入py或者python验证一下是否安装成功 打开目录文件夹 在里面新建一下pip的文件夹&#xff0c;里…

OpenAI开发了一种新方法来教授AI模型与安全政策保持一致

OpenAI 宣布了一种新的方法来教授人工智能模型与安全政策保持一致&#xff0c;这种方法被称为"基于规则的奖励"&#xff08;Rules Based Rewards&#xff09;。据 OpenAI 安全系统负责人 Lilian Weng 介绍&#xff0c;基于规则的奖励&#xff08;RBR&#xff09;可以…

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录 前言 项目背景 en类型 du类型 ex类型 组合类型 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simul…

盘点适合新手使用的4个剪辑工具。

很多宝子们都觉得剪辑很难&#xff0c;想学习又觉得自己没有专业的剪辑知识指导&#xff0c;不好上手。那是因为不知道有这些工具&#xff0c;这4款专业的剪辑软件对新手来说简直就是福音。 1、福昕剪辑 直达链接&#xff1a;www.pdf365.cn/foxit-clip/ 这个软件的界面设置的…

cGDB 调试方法

用法总结 Ubuntu系统&#xff0c;安装cGDB sudo apt updatesudo apt install cgdb 编译代码 g -g -o example example.cpp -lpthread要确保有 -g &#xff0c;代码是调试信息编译的 启动测试&#xff1a;cgdb ./可执行文件 此处可以使用esc进入命令模式&#xff0c;vim命令上下…

生活方式酒店升势迅起,喆啡酒店缘何成为投资热点?

伴随国内消费结构转型升级&#xff0c;旅游需求持续增加。文旅部发布的《国内旅游提升计划&#xff08;2023—2025年&#xff09;》提出&#xff0c;需丰富优质旅游供给&#xff0c;并进一步提高消费者体验及满意度&#xff0c;这将为酒店行业带来更广阔的客源和更高的质量要求…

SpringBoot上传超大文件导致OOM,完美解决办法

问题描述 上传大文件报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] …

探索Axure在数据可视化原型设计中的无限可能

在当今数字化浪潮中&#xff0c;产品设计不仅关乎美观与功能的平衡&#xff0c;更在于如何高效、直观地传达复杂的数据信息。Axure RP&#xff0c;作为原型设计领域的佼佼者&#xff0c;其在数据可视化原型设计中的应用&#xff0c;正逐步揭开产品设计的新篇章。本文将从多个维…

同声翻译怎么做?其实有这几种方法

同声翻译怎么做&#xff1f;同声翻译&#xff08;Simultaneous Interpretation&#xff09;是指在说话人讲话的同时&#xff0c;翻译人员即时将内容转换成另一种语言的过程。随着全球化的发展和技术的进步&#xff0c;同声翻译已成为跨文化交流的重要工具。那么&#xff0c;今天…

stl-priority_queue 优先队列

目录 ​编辑优先队列 头文件&#xff1a;#include《queue》&#xff1b;即可 访问&#xff1a;只能访问队首.top() 添加。push&#xff08;元素&#xff09;&#xff0c;按优先级排列 删除。pop&#xff08;&#xff09;&#xff0c;删除队首元素&#xff08;堆顶&#xff…

嵌入式初学-C语言-八

#接嵌入式初学-C语言-七# 分支结构 分支结构&#xff1a;又被称之为选择结构 选择结构的形式 多分支 语法&#xff1a; if(条件1) { 语句1; } else if(条件2) { 语句2; } ... else { 语句n1; }案例&#xff1a; #include <stdio.h> int main() { // 需求&#xff…

采购订单打开单据时表格行设置颜色

文章目录 采购订单打开单据时表格行根据条件显示背景色Python实现插件实现创建项目创建类&#xff0c;实现接口重写方法编译后挂载插件到表单插件启动开发环境进行测试单元格设置背景色行背景色 采购订单打开单据时表格行根据条件显示背景色 Python实现 import clr clr.AddR…

VitualBox虚拟机重启后配置无法保存,已安装软件变为没有安装

VitualBox虚拟机重启后虚拟机还原为上次开机的状态&#xff0c;安装的安装包配置啥的全部丢失。 按网上的配置了半天也没解决。最终用下面讨巧的办法&#xff0c;即不重启虚拟机。 我们不在重启虚拟机&#xff0c;那我们想关闭虚拟机的时候怎么办呢&#xff1f; 1、按下图所…

104 二叉树的最大深度

解题思路&#xff1a; \qquad 最大深度可以想到使用DFS(深度优先)或BFS(广度优先)来解决。 \qquad DFS&#xff1a;一般用 递归 or 迭代栈。递归实现较为简单。 \qquad BFS&#xff1a;一般用 迭代队列。 DFS&#xff1a; \qquad 对于每个节点&#xff0c;将左子树的最大深…

二进制搭建 Kubernetes v1.20(上)

目录 一、操作系统初始化配置 二、升级Liunx内核 三、部署docker引擎 四、部署etcd集群 五、部署Master组件 六、部署Worker Node组件 hostnameip需要部署k8s集群master0120.0.0.100kube-apiserver kube-controller-manager kube-scheduler etcdk8s集群master0220.0.0.1…