QCustomPlot实现矩形缩放图表

QCustomPlot实现矩形缩放图表


意图

我们知道图表有些基本的功能,比如放大(ZoomIn)、缩小(ZoomOut)、拖拽(Drag)、恢复(1:1或ZoomReset)。这些功能QCustomPlot已经几乎都有了,但是选择矩形区域进行缩放的功能没有给出很好的接口,这可能就要我们自己实现了,这就是写这篇文章的目的。


实现

QCustomPlot本身有缩放的功能,但是没有实现矩形缩放的接口,所以实现的话无非是在图表上面实现鼠标选择的矩形区域,然后进行比例缩放。我们借助Qt自带的QRubberBand来实现矩形选择区域。看帮助文档和源码,我们可以看到当鼠标在图表区域上的时候,包括鼠标按下,移动,释放,这些动作会发送信号。

所以有两种方法实现:

  1. 我们只要以父控件实现槽函数来绑定这些信号来做特定处理就行了
  2. 实现QCustomPlot的子类,重载鼠标按下,移动,释放等鼠标事件函数

父控件槽函数实现方法

按照QCustomPlot提供的例子,我们写一个最简单的例子。
把QCustomPlot设为MainWindow的centralWidget。

UI界面

少废话了,上源码吧:
MainWindow的头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRubberBand>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:

    void mousePress(QMouseEvent* mevent);

    void mouseMove(QMouseEvent *mevent);

    void mouseRelease(QMouseEvent *mevent);

    void slotBtn();

private:
    Ui::MainWindow *ui;
    QRubberBand *rubberBand;
    QPoint rubberOrigin;
};

#endif // MAINWINDOW_H

MainWindow的构造函数实现

//初始化QRubberBand
rubberBand = new QRubberBand(QRubberBand::Rectangle, ui->customPlot);

//从自带的例子中复制的代码
ui->customPlot->addGraph();
ui->customPlot->graph(0)->setPen(QPen(Qt::blue)); // line color blue for first graph
ui->customPlot->graph(0)->setBrush(QBrush(QColor(0, 0, 255, 20))); // first graph will be filled with translucent blue
ui->customPlot->addGraph();
ui->customPlot->graph(1)->setPen(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值