1、当绘制的线性图等需要水平拖动的时候(不用qwt里面的函数),可以用QSlider,代码如下

ui.horizontalSlider->setMaximum();  //需要拖动的越缓慢,平滑它的值就设置得越大
ui.horizontalSlider->setSingleStep();  //拖动的最小单位 QObject::connect(ui.horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderMovedSlot(int))); //在槽函数中改变qwt的横坐标显示范围
QObject::connect(ui.horizontalSlider, SIGNAL(sliderPressed()), this, SLOT(sliderPressSlot()));
QObject::connect(ui.horizontalSlider, SIGNAL(sliderReleased()), this, SLOT(sliderReleaseSlot()));
/*滑条按下*/
void RoadAllData::sliderPressSlot()
{
  SLIDER_RUNNING = true;  //滑条正在拖动,这个时候在添加曲线的点的地方,将不会改变曲线显示的范围(setRange)
  realLeft = ui.customPlot->xAxis->range().lower;    //获取当前显示曲线的窗口的最小横坐标
  realRight = ui.customPlot->xAxis->range().upper;    //最大横坐标
}
/*滑条释放*/
void RoadAllData::sliderReleaseSlot()
{
  SLIDER_RUNNING = false;  //滑条停止滑动
  if (!FILEOPENING)//不是打开数据库,而是实时更新的状态
 {
    ui.horizontalSlider->setValue(ui.horizontalSlider->maximum());
  }
}
/*滑条滑动响应的槽函数*/
void RoadAllData::sliderMovedSlot(int value)
{
  if (FILEOPENING)
  {
    double min = graphData[][];
    double max = graphData[][graphData[].size() - ];
    double left = , right = ;//需要显示在界面的范围
    double tmp = ;
    //获取left、right
    if (UP_LINE_WAY)
    {
      tmp = value / (ui.horizontalSlider->maximum()*1.0) * (abs(max - min)) + min;
      left = tmp;
      right = tmp+0.3;
    }
    else
    {
      tmp = min - value / (ui.horizontalSlider->maximum()*1.0) * (abs(max - min));
      left = tmp;
      right = tmp - 0.3;
    }
    //qDebug() << left << right <<" "<< min << max;
    //设置显示范围
    ui.qwtPlot->xAxis->setRange(left, right);
    ui.qwtPlot->replot();
  }
}

2、实现qwt动态加载图片的时候,可以拖动水平滚动条查看历史数据(不受数据实时更新的影响)

else//实时
{
//获取left、right
if (UP_LINE_WAY) //上行,横坐标递增
{
tmp = realRight - (ui.horizontalSlider->maximum() - value) / (ui.horizontalSlider->maximum()*1.0) * (realRight-realFirst);//realRight是指qwt曲线当前屏幕range的最大值,realFirst是指曲线的起点
right = tmp;
left = tmp - 0.3;
}
else //下行,横坐标递减
{
tmp = realLeft + (ui.horizontalSlider->maximum() - value) / (ui.horizontalSlider->maximum()*1.0) * (realFirst - realLeft);//realLeft指的是当前屏幕range的最大值。
right = tmp;
left = tmp + 0.3;
}
qDebug() << "left:" << left << "right:" << right<<"value:"<<value;
//设置显示范围
ui.customPlot->xAxis->setRange(left, right);
ui.customPlot->replot();
} /*x轴设置反向或者正向*/
ui.customPlot->xAxis->setRangeReversed(true);//x轴反向
ui.customPlot->xAxis->setRangeReversed(false);//x轴正向

使用QSlider的更多相关文章

  1. QSpinBox 和 QSlider 联合使用方法

    在Qt中,有时候我们想要联合QSpinBox 和 QSlider,使得移动滑块,QSpinBox中的数据会变化,或者我们在QSpinBox中输入一个数值,响应的滑块也会变化,如下图所示:

  2. Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)

    首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...

  3. QSlider解决点击不能到该位置问题

    方法一:可以继承重写一个QSlider 方法二:1.instaneventfiliter(this);slider安装一个事件过滤器 2.在eventfilter(QObject *,QEvent*) ...

  4. 七、PyQT5控件——QSlider,QSpinBox

    一.Qslider QSlider是一个滑动条,可以设置成水平或垂直放置.最常用的方法允许用户在某一范围内互动该滑块,并将滑块的位置转换成一个整数值(int类型),这种方式可以在某一个范围内平顺的变动 ...

  5. Qt基础学习---滑动条之QSlider

    Qt滑动条基本用法: //mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog> class QLineEd ...

  6. 滑动条QSlider

    QSlider只提供整数范围 滑块接受Tab键的焦点,并同时提供了一个鼠标滚轮和键盘接口.键盘接口如下: Left/Right 移动水平滑块一个步长.Up/Down 移动垂直滑块一个步长.PageUp ...

  7. 【PyQt5-Qt Designer】QSlider滑块

    QSlider滑块 QSlider简介 QSlider小部件提供了一个垂直或水平滑块. 滑块是控制有界值的经典控件.它允许用户沿水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值. Q ...

  8. QScrollBar & QSlider & QDial

    [1]滚动条 & 滑块 & 表盘 Qt示例工程: (1)slidergroup.h #include <QGroupBox> QT_BEGIN_NAMESPACE clas ...

  9. Qt基础学习(3)-----滑动条之QSlider

    //mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog> class QLineEdit; class Q ...

  10. Qt中QSlider的样式表设置

    转自: https://blog.csdn.net/tax10240809163com/article/details/50899023 //首先是设置主体QSlider{border-color: ...

随机推荐

  1. 树————N叉树的层序遍历

    思想: 使用队的思想,将每一层的节点放入队列中,依次弹出,同时将其children放入队列. c++ /* // Definition for a Node. class Node { public: ...

  2. Eclipse中properties文件,中文只显示Unicode问题(Properties Editor)

    我们常常在properties文件中添加中文注释,而properties文件的中文需用unicode表示, 使用eclipse默认的properties文件编辑器查看显示中文为乱码. 即便修改prop ...

  3. 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)

    链接:https://ac.nowcoder.com/acm/contest/925/K来源:牛客网 题目描述 公元2019年6月22日,白山茶王国与红玫瑰王国展开大战,在世外仙境——天空花园处,双方 ...

  4. Linux环境进程间通信----信号与管道

    一.信号: 信号主要用来通知进程异步事件的发生.可以使用“kill -l ”命令来显示系统中的信号.进程可以忽略大部分信号,但是有两个是不能忽略的: (1)SIGSTOP:这个信号将中断进程的执行. ...

  5. 四:RF框架appium工具之xpath定位

    XPATH定位方法具体的学会,还是在今年1月份,以前运用的都不熟练. 这个定位神器是一定要掌握的,不然有你抓狂的时候. 第一要掌握它的书写格式,这个好上手. 第二要掌握它的具体用法.这个就要多练习了, ...

  6. inode缓存与dentry缓存

    1. inode缓存 1: struct inode { 2: /* RCU path lookup touches following: */ 3: umode_t i_mode; 4: uid_t ...

  7. 洛谷 P2756 飞行员配对方案问题 (二分图匹配)

    题目链接:P2756 飞行员配对方案问题 题意 给定 \(m\) 个外籍飞行员和 \(n - m\) 个英国飞行员,每一架飞机需要一名英国飞行员和一名外籍飞行员,求最多能派出几架飞机. 思路 最大流 ...

  8. webpack中引用Element-ui

    1.下载element-ui npm i element-ui --production 2.在main.js中引用 import Element from 'element-ui' import ' ...

  9. webpack中代理配置(proxyTable)

    注:用axios请求 1,下载axios npm i axios --save 2,在config文件下的index.js中配置代理地址 参考:https://vuejs-templates.gith ...

  10. spring boot下WebSocket消息推送

    WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...