QCustomPlot学习(1)

右键选框放大

    • 效果图
    • 代码修改
    • 参考博客

QCustomPlot 自带了选框放大功能,所以实现右键框选放大只需要对源码进行小小的修改即可;另添加框选时按下Esc键退出框选。

效果图

右键框选:
QCustomPlot学习(1)_第1张图片
放大后图形:
QCustomPlot学习(1)_第2张图片

代码修改

由于QCustomPlot自带的框选功能使用左键,所以框选与拖动不能同时进行;对源码中 class QCP_LIB_DECL QCustomPlot : public QWidget 的 void QCustomPlot::mousePressEvent(QMouseEvent *event) 在 mSelectionRect && mSelectionRectMode != QCP::srmNone 后添加 && (event->buttons() & Qt::RightButton) 即可。此时仅在选择了框选功能且右键按下才能触发框选,而不影响左键功能。

另在 class QCustomPlot 中添加按键处理的代码:

void QCustomPlot::keyPressEvent(QKeyEvent *event)
{
	if (event->key() == Qt::Key_Escape && mSelectionRect->isActive() && mSelectionRect){
		mSelectionRect->cancel();
		mSelectionRect->layer()->replot();
	}
}

其实 QCustomPlot 的矩形选框类 class QCP_LIB_DECL QCPSelectionRect 中有一个对按键处理的函数如下:

void QCPSelectionRect::keyPressEvent(QKeyEvent *event)
{
  if (event->key() == Qt::Key_Escape && mActive)
  {
    mActive = false;
    emit canceled(mRect, event);
  }
}

对比上面代码可以看出我只是把官方的代码复制了一遍而已。。。
最后,只需在实例化 QCustomPlot 类后添加:

//zoom with rightbutton
	m_Plot->setSelectionRectMode(QCP::srmZoom);
	m_Plot->selectionRect()->setPen(QPen(Qt::red));

参考博客

1、https://blog.csdn.net/bing_lee/category_8726610.html
2、https://blog.csdn.net/qq10097355/category_9801691.html
3、https://www.cnblogs.com/swarmbees/category/908110.html
4、https://blog.csdn.net/qq_31073871/category_8935784.html

你可能感兴趣的:(QCustomPlot学习)