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. AcWing 197. 阶乘分解 (筛法)打卡

    给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...

  2. php开发面试题---1、php常用面试题一(PHP有哪些特性)

    php开发面试题---1.php常用面试题一(PHP有哪些特性) 一.总结 一句话总结: ①.混合语法:php独特混合了C,Java,Prel以及PHP自创的语法. ②.为动态网页而生:可以比CGI或 ...

  3. ubuntu 无pthread

    由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装 $sudo apt-get install glibc-doc 安装以后,发现还是有很多函 ...

  4. testNG官方文档翻译-2 注解

    这里是一份TestNG中的可用注解及其属性的概述. 一.用于一个TestNG类的信息配置的注解: @BeforeSuite:被BeforeSuite注解的方法将在其所在suite中的所有test运行之 ...

  5. C#WinForm 窗体单例模式 反射单例

    做了个mdi窗体 原以为指定一下MDIParent就可以了 没想到多次点击会出现多个窗体的现像 所以用到了单例模式 做法是这样的(学习出处:连接) 1.在子窗体声明一个子窗体类型的私有静态变量 并把子 ...

  6. 从可变长函数到legb

    可变长参数 * *形参 用元组接收接收多余的位置实参 约定俗成形参名为 *args def f1(*args):#调用函数时,有多少个参数我就接收多少个 res = 0 for num in args ...

  7. 内网渗透_linux_socks代理_reGeorg+proxychains

    过程演示 测试前提是目标服务器已经getshell. 1.将 reGeorgSocksProxy 中的 tunnel.jsp 文件放置到目标服务器web目录,查看能否正常访问(如图). 2.设置kal ...

  8. createBottomTabNavigator: 怎么在切换tab的时候让页面重新渲染

    1.import withNavigationFocus from react-navigation to your class . 2.hen export your like this : exp ...

  9. Charles使用技巧

    过滤不必要请求 有些时候会抓取到很多自己不需要的请求 ,看起来不直观 只想抓包自己关心的地址 在外部设备抓包 比如你的手机设备 电脑模拟器等 本质就是你通过Charles开启一个代理端口,无论是外部设 ...

  10. msql数据库基础

    一.数据库操作 1.显示数据库 SHOW DATABASES; SHOW CREATE DATABASE 数据库名称; #数据库的创建信息 2.创建数据库 #utf8 CREATE DATABASE ...