面试 vue ASP.NET Core image loops email security lambda 逻辑端口 safari routing angular material insert icons Validator jquery循环 js获取数组第一个元素 android自定义控件 matlab输入参数太多 数据库查询 普通话网上报名 input函数python python使用正则表达式 python程序代码 python模块下载 javaabstract java异常处理 linux服务器登录 linux目录系统 网站后台模板 js转int fdisk下载 黑市商人 msn格式 js包含字符串 华为手机刷公交卡 sdm439 xmind画流程图 asp编程 jsp源码
当前位置: 首页 > 学习教程  > 编程学习

QtChart 启用缩放功能setRubberBand()之后,setRange(min, max)出现的问题

2021/1/9 1:59:33 文章标签: ps鼠标放大缩小

QtChart 启用缩放功能setRubberBand()之后,setRange(min, max)出现的问题 因项目需要,用qtchart绘制的图形需要框选放大,这里用到了setRubberBand()函数,但是在左键复原的时候出现了问题。 先铺垫一下&…

QtChart 启用缩放功能setRubberBand()之后,setRange(min, max)出现的问题

因项目需要,用qtchart绘制的图形需要框选放大,这里用到了setRubberBand()函数,但是在左键复原的时候出现了问题。
先铺垫一下,博主是重写了chartview的鼠标事件的mouserelease(event)来触发复原的信号。
复原的原理:记录初始时的坐标轴的range,接收到复原信号后,将原坐标轴重置setRange()即可。

问题来了

先来看看初始时的图形:
在这里插入图片描述
所有波形的时间轴为一样的,通过框选任意波形选择框选的时间轴将所有波形全部放大,
在这里插入图片描述
通过点击鼠标左键复原
在这里插入图片描述
图中随便点击哪个波形,需要是要所有波形恢复正常,这时问题出现了,除了被点击的波形之外其他波形都恢复正常,此时右键点击其他波形,第一个波形恢复正常,被点击的波形出现同样的问题。
经过梳理发现问题可能就出现在setRubberBand()上,通过查询果不其然,上段文档

[virtual protected] void QChartView::mouseReleaseEvent(QMouseEvent *event)

Reimplemented from QWidget::mouseReleaseEvent().
If the left mouse button is released and the rubber band is enabled, the event event is accepted and the view is zoomed into the rectangle specified by the rubber band. If releasing the right mouse button triggered the event, the view is zoomed out.

大概意思是:
重新实现从QWidget: mouseReleaseEvent ()。
如果松开鼠标左键并启用了橡皮筋,则接受事件事件并将视图放大到橡皮筋指定的矩形中。如果释放鼠标右键触发事件,视图将缩小。

好了,得到这个答案之后,再来看看重新实现的mouseReleaseEvent ()。
因为我只需要右键松开触发复原的信号,所以这个mouseReleaseEvent()事件到重写的mychartview中就完成使命了,不用将事件继续传递。

void mouseReleaseEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::LeftButton)
        {
            if(is_Pressed_)
            {
                QChartView::mouseReleaseEvent(event);
                emit sgl_rangeChange(this);
                is_Pressed_ = false;
                return;
            }
        }
        else
        {
            emit sgl_recoverRange(this);
        }
        //QChartView::mouseReleaseEvent(event);
    }

将**QChartView::mouseReleaseEvent(event);**注释掉即可

PS:
有小伙伴需要用到绘图时,可以看看qcustomplot,个人觉得这个库要比qtchart好用,(项目开始时用的qtchart,后面就改用了qcustomplot ( -_-))


本文链接: http://www.dtmao.cc/news_show_1100179.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?