找回密码
 立即注册
收起左侧

qwtplot多图联动(同步)的方法

2
回复
8075
查看
[复制链接]
累计签到:882 天
连续签到:3 天
来源: 原创 2015-6-19 12:04:43 显示全部楼层 |阅读模式
本帖最后由 一叶知秋 于 2015-6-19 12:49 编辑

找了半天终于被我给搞定了,效果是在某一个plot上缩放,多个图可以同时放大缩小移动。。。
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"

  3. #include <QDebug>
  4. MainWindow::MainWindow(QWidget *parent) :
  5.     QMainWindow(parent),
  6.     ui(new Ui::MainWindow)
  7. {
  8.     ui->setupUi(this);

  9.     PM1 = new QwtPlotMagnifier(ui->qwtPlot1->canvas());
  10.     PM2 = new QwtPlotMagnifier(ui->qwtPlot2->canvas());
  11. //    QwtPlotPanner *PQ1 = new QwtPlotPanner(ui->qwtPlot1->canvas());
  12. //    QwtPlotPanner *PQ2 = new QwtPlotPanner(ui->qwtPlot2->canvas());

  13. // step1: 将这个信号与自定义的槽函数关联起来 互为映射需要建立相互之间的关联
  14.     connect(ui->qwtPlot1->axisWidget(QwtPlot::xBottom), SIGNAL(scaleDivChanged()),
  15.             SLOT(setRange()));
  16. }

  17. MainWindow::~MainWindow()
  18. {
  19.     delete ui;
  20. }

  21. // step2: 在自定义的槽函数中获取坐标轴的上下限,然后再将其应用到另一个图上就可以了
  22. void MainWindow::setRange()
  23. {
  24.     double xMin = ui->qwtPlot1->axisScaleDiv(QwtPlot::xBottom).lowerBound();
  25.     double xMax = ui->qwtPlot1->axisScaleDiv(QwtPlot::xBottom).upperBound();
  26.     double yMin = ui->qwtPlot1->axisScaleDiv(QwtPlot::yLeft).lowerBound();
  27.     double yMax = ui->qwtPlot1->axisScaleDiv(QwtPlot::yLeft).upperBound();

  28.     ui->qwtPlot2->setAxisScale(QwtPlot::xBottom, xMin, xMax);
  29.     ui->qwtPlot2->setAxisScale(QwtPlot::yLeft, yMin, yMax);
  30.     ui->qwtPlot2->replot();
  31. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:882 天
连续签到:3 天
2015-6-19 12:51:39 显示全部楼层
顺便吐槽一句,qwt用起来还真不如QCustomPlot顺手
回复 支持 反对

使用道具 举报

累计签到:30 天
连续签到:1 天
2016-7-24 16:48:32 显示全部楼层
一叶知秋 发表于 2015-6-19 12:51
顺便吐槽一句,qwt用起来还真不如QCustomPlot顺手

我觉得QCustomPlot画实时曲线的确不错。但是没用过QWT。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了