QCustomplot使用分享(五) 布局

本文对比了QCustomplot在1.3.2和2.0.0版本中QCPLayoutElement的差异,详细介绍了布局元素成员、QCPLayout类以及QCPLayoutGrid和QCPLayoutInset的用法,并提供了多坐标轴布局的示例。
摘要由CSDN通过智能技术生成

一、历史对比

  关于QCPLayoutElement这个元素的讲解之前,我想先对1.3.2release版本和2.0.0beta版本的该元素做以简单的对比介绍,首先,1.3.2release版本时,鼠标单击时,如果按下的位置是一个布局元素,那么QCustomPlot首先会把这个事件回调给该被点击的元素,并且mouse系列的方法都是这样传递给QCPLayoutElement对象,该布局元素的声明会像这样QPointer<QCPLayoutElement> mMouseEventElement;但是到了2.0.0beta版本时,QCustomPlot源码做出了很大的调整,不仅仅是QCPLayoutElement布局元素可以接收鼠标事件,凡事继承自QCPLayerable类的元素都可以支持鼠标事件,因为mouse一系列的方法被移到了QCPLayerable类中。下面我分别贴出这两个版本时的mousePressEvent处理方法

    1.3.2release版本鼠标按下处理方式

 1 void QCustomPlot::mousePressEvent(QMouseEvent *event)
 2 {
 3     emit mousePress(event);
 4     mMousePressPos = event->pos(); // need this to determine in releaseEvent whether it was a click (no position change between press and release)
 5 
 6     // call event of affected layout element:
 7     mMouseEventElement = layoutElementAt(event->pos());//后去当前选中布局元素 并调用其相关接口
 8     if (mMouseEventElement)
 9         mMouseEventElement->mousePressEvent(event);
10 
11     QWidget::mousePressEvent(event);
12 }

    2.0.0beta版本鼠标按下处理方式

 1 void QCustomPlot::mousePressEvent(QMouseEvent *event)
 2 {
 3     emit mousePress(event);
 4     // save some state to tell in releaseEvent whether it was a click:
 5     mMouseHasMoved = false;
 6     mMousePressPos = event->pos();
 7 
 8     if (mSelectionRect && mSelectionRectMode != QCP::srmNone)//优先处理鼠标绘制矩形事件
 9     {
10         if (mSelectionRectMode != QCP::srmZoom || qobject_cast<QCPAxisRect*>(axisRectAt(mMousePressPos))) // in zoom mode only activate selection rect if on an axis rect
11             mSelectionRect->startSelection(event);
12     }
13     else
14     {
15         // no selection rect interaction, so forward event to layerable under the cursor:
16         QList<QVariant> details;
17         QList<QCPLayerable*> candidates = layerableListAt(mMousePressPos, false, &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值