自定义QChartView实现鼠标放在图表时,显示鼠标位置坐标值(x,y)

这篇具有很好参考价值的文章主要介绍了自定义QChartView实现鼠标放在图表时,显示鼠标位置坐标值(x,y)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:因为需要一次性从文件中加载大量数据到图表中显示,所以打算使用qchartview+qscrollarea,当横坐标数据超出默认设定的显示范围之后,重新设置chartview的宽度和scrollarea内容区域(scrollAreaWidgetContents)的宽度,从而实现一次性显示所有数据的目的。因为这样显示之后,如果滚动条向右边拖动时,图表的纵坐标会看不到,为了能够方便的显示纵坐标上的值,于是想到在鼠标放在图表时,通过一个标签显示鼠标所在位置的坐标。

一、自定义QChartView,实现鼠标移动事件,获取坐标值。

项目代码根目录添加c++头文件和源文件,切记根目录,不要在子目录。

showvaluechartview.h

#ifndef SHOWVALUECHARTVIEW_H
#define SHOWVALUECHARTVIEW_H
#include <QChartView>
class ShowValueChartView: public QChartView
{
    Q_OBJECT
public:
    explicit ShowValueChartView(QWidget *parent = Q_NULLPTR);
protected:
    void mouseMoveEvent(QMouseEvent *e);
public: signals:
        /** 鼠标在图表位置的数据改变时触发 **/
        void onMousePositionValueChanged(QPointF valueGivenSeries);
};

#endif // SHOWVALUECHARTVIEW_H

showvaluechartview.cpp

#include "showvaluechartview.h"

ShowValueChartView::ShowValueChartView(QWidget *parent) : QChartView(parent)
{
    setMouseTracking(true);
}

void ShowValueChartView::mouseMoveEvent(QMouseEvent *e)
{
    auto const widgetPos = e->position();
    auto const scenePos = this->chart()->mapToScene(QPoint(static_cast<int>(widgetPos.x()),                                                     static_cast<int>(widgetPos.y())));
    auto const chartItemPos = chart()->mapFromScene(scenePos);
    auto const valueGivenSeries = chart()->mapToValue(chartItemPos);
//    qDebug() << "widgetPos:" << widgetPos;
//    qDebug() << "scenePos:" << scenePos;
//    qDebug() << "chartItemPos:" << chartItemPos;
    // 鼠标所在位置的图表X,Y坐标值
//    qDebug() << "valSeries:" << valueGivenSeries;
    emit onMousePositionValueChanged(valueGivenSeries);
}

二、从文件中加载图表数据,并从新设置图标宽度和滚动条内容控件宽度,方便查看所有数据

1) 设计界面拖一个QWidget到显示图表的区域,然后提升控件为ShowValueChartView,文章可参考:Qt创建自定义View和在布局中使用自定义View的方法_qt自定义布局_Zafir2023的博客-CSDN博客

2)初始化chartview控件,文章可参考:

【精选】QChartView显示实时更新的温度曲线图,即动态曲线图。_Zafir2023的博客-CSDN博客

中的initTempChartView函数。

// 初始化完chartview之后添加如下代码,需要在windows定义槽函数,并实现
// 关联鼠标在图表上移动时的显示坐标的槽函数
connect(ui->chartView, &ShowValueChartView::onMousePositionValueChanged,
           this, &YourWindow::onMousePositionValueChanged);

 3)从文件中加载图表要显示的数据,并添加到图表的坐标序列中。

// 此处以横纵坐标都是QValueAxis类型为例。若横坐标是日期型,也类似
QList<QPointF> dataList;
for (int i = 0; i < 500; i++) {
    QPointF tmp;
    tmp.setX(i + 1);
    tmp.setY(10);
    dataList.append(tmp);
}
// 效率高,加载速度快
splineSeries.replace(dataList);
// 重新设置chartview宽度
resizeChartView(dataList);

4)根据数据量,重新设置控件大小,滚动显示图表内容

void YourWindow::resizeChartView(QList<QPointF> dataList) {
	int valueCount = dataList.size();//从文件中加载的数据总个数/X轴的刻度个数
	// 可根据默认图表宽度,在能显示所有横坐标数字的情况下,设置固定值
	int defaultChartXTickCount = 默认图表的x轴刻度个数(默认图表宽度能显示的最大数据个数)。
	// 这个可放在windows构造函数中获取一次即可,此处为了简化,defaultChartViewWidth 为成员变量
	if (defaultChartViewWidth == 0) {
		defaultChartViewWidth = ui->chartView->width();//图表默认宽度
	}
    if (valueCount > defaultChartXTickCount) {
        // 设置横坐标数据范围
        valueAxisX->setRange(1, valueCount);
        //设置坐标轴的精度;分成多少份(多少个刻度),最小间隔为Range/(TickCount - 1)
        valueAxisX->setTickCount(valueCount);
        // 图表视图横向放大倍数
        int chartWidthMagnify = 1;
        if (valueCount % defaultChartXTickCount == 0) {
            chartWidthMagnify = valueCount / defaultChartXTickCount;
        } else {
            chartWidthMagnify = valueCount / defaultChartXTickCount + 1;
        }
		// 滚动条控件内部的内容控件宽度,决定滚动显示内容的宽度
        ui->scrollAreaWidgetContents->setMinimumWidth(defaultChartViewWidth * chartWidthMagnify);
		// 图表宽度重新设置,容纳所有数据
        ui->chartView->setMinimumWidth(defaultChartViewWidth * chartWidthMagnify);
    }
}

 文章来源地址https://www.toymoban.com/news/detail-755328.html

到了这里,关于自定义QChartView实现鼠标放在图表时,显示鼠标位置坐标值(x,y)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python_PyQtGraph 学习笔记(三)】基于GraphicsLayoutWidget实现显示曲线对象 鼠标位置处坐标的功能

    在PyQtGraph的官方例程中有此功能的实现,可参考Crosshair / Mouse interaction;但是坐标值的变化是超过整数时才变化,不符合实际开发中要求的精度。 在实现该功能的过程中主要参考了(详细分析)如何使用pyqt5和pyqtgraph在图像上增加图例并显示鼠标位置处的变量值,但是在获取

    2024年02月09日
    浏览(43)
  • 【QML】鼠标放在控件上颜色改变的效果实现

    最近刚好要用到一个功能,在qml上实现鼠标放上去,控件的颜色改变,鼠标移走,控件颜色恢复。第一反应是这个功能非常简单,但是搞了一会儿都没实现,最后发现MouseArea其实提供了一个很简便的方法来提供使用,这里做个记录: 效果图如下:

    2024年02月12日
    浏览(40)
  • vue3自定义指令实现超出显示省略号,鼠标浮入弹出title,显示全部文本

    mounted 和 updated 是 Vue 生命周期钩子函数,分别表示 指令挂载到元素 和 指令所在组件更新时触发 。 el : HTMLElement 和 binding : DirectiveBinding 是方法参数, el 表示指令作用的元素, binding 包含指令的绑定值、参数和修饰符等信息。 el.offsetWidth 获取的是元素在渲染时所占据的整体

    2024年02月01日
    浏览(34)
  • Qt鼠标点击事件处理:显示鼠标点击位置(完整示例)

    Qt 入门实战教程(目录) 前驱文章: Qt Creator 创建 Qt 默认窗口程序(推荐) 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。 例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 如鼠标事件(例如点击

    2024年02月10日
    浏览(38)
  • 练习 Qt 实时显示鼠标坐标位置

    Qt 入门实战教程(目录) 本文是文章 Qt鼠标点击事件处理:显示鼠标点击位置(完整示例) 的一个作业(下文称之为“前驱课程”)。 前驱课程中,我们完整的展示了如何在QtCreator中添加成员函数,并使用重构工具添加函数定义。 只需要模仿前驱课程,即可完成本文的作业

    2024年02月10日
    浏览(26)
  • QT QChartView 鼠标随动 十字线 缩放 平移 拖动

    QChart添加跟随鼠标的十字线_x县豆瓣酱的博客-CSDN博客_qchart鼠标跟踪线 最近在做这么一个东西,需要十字线。我参考自上面的博主的内容,但是他没写全。很多人不知道这个QGraphicsLineItem 是怎么创建的,然后x_line 和y_line 是如何弄到chartview 的Scene中的。 下面试我的效果,实现

    2024年02月12日
    浏览(30)
  • Qt for python QChartView鼠标滚动放大缩小

    最近使用Qt for python 做了一个图表,有个需求是用鼠标中轮,根据中轮的滚动来放大缩小显示的曲线,我这边用Qml实现的QChart图表, 当然QWidget的相应方法也会提到,都是一样的,相对于qml实现这个功能是真麻烦,得使用C++才能实现,而我又是使用的python,所以难度更大,正好

    2024年02月09日
    浏览(27)
  • unity的ui怎么显示在鼠标点击位置

    第一种方法: 其实很简单,Input.mousePosition本身就是屏幕坐标(二维),不能直接使用是因为,屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight),nn或者说以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height)而屏幕的基准点在屏幕中心(Scre

    2023年04月17日
    浏览(27)
  • 【Qt】QCustomPlot组件跟随鼠标显示xy轴坐标位置

    目录 一、 问题描述 二、 解决方案 三、代码实现 一、 问题描述 如题所述。 二、 解决方案 自定义一个继承QCustomPlot类的实现类,重写mouseMove虚函数实现,从而获取鼠标位置,然后计算出点的坐标值,再利用QToolTip显示点坐标。 三、代码实现 继承自QCustomPlot组件的MFMCustomPl

    2024年02月11日
    浏览(36)
  • QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示

    这里演示的是QT基础,主要包含: event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式等功能演示, 适合初学者食用 。 演示功能:点击鼠标左键、右键、中键、左右键同时点击,输出鼠标当前坐标;按下鼠标中键,鼠标样式被替换,按下鼠标左

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包