环境:Qt5

编译器:Qt Creator

需求:如图

显示区域win 600*300

需要显示的Widget控件show 590*550

则有600*250的show界面无法显示

使用滑块控制show界面滚动显示全部内容

实现过程:

增加水平滑块verticalScroolBar (10*300)控件

注意:verticalScroolBar不要放在show控件上,而是show、verticalScroolBar两个控件同时以win界面为父界面水平摆放

第一步:实现拖拽滑块滚动show界面

连接信号与槽

声明一个滑块响应槽

  1. private slots:
  2. slot_ScroolWidget(int);
  1. connect(ui->verticalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(slot_ScroolWidget(int)));

verticalScrollBar的信号valueChagned(int)发送来一个int参数

该参数指明当前滑块所在的位置

其中,滑块长度恒定为0-100,而该参数就是介于0-100之间

槽函数实现

  1. void fun::slot_ScroolWidget(int value)
  2. {
  3. double p=static_cast<double>(value)/static_cast<double>(ui->verticalScrollBar->maximum());
  4. ui->background->move(0,-(ui->background->height()-350)*p);
  5. }

获得滑块的位置value

计算一个比例因子p=滑块的位置/滑块的最大位置

利用比例因子p,调用show的成员函数move来移动相应的位置

到此,滑块滚屏的基本功能已经实现了

但是,一般来说,更顺手使用鼠标滚轮来进行滚屏

所以,我们还需要重载wheelEvent()事件来实现此功能

  1. void fun::wheelEvent(QWheelEvent *event)
  2. {
  3. int para=event->angleDelta().y();//获得鼠标滚轮的滚动距离para,para<0向下滚动,>0向上滚动
  4. if (para<0)
  5. {
  6. //向下滚动,设定鼠标滚轮每滚动一个单位,滑块就移动20个单位
  7. //加入此判断的理由是,若当时滑块处于90的位置上,一旦继续下滑20个单位,就会超过最大范围100,show界面就会移动超出范围。
  8. if (ui->verticalScrollBar->value()+20<=100)
  9. {
  10. //发射verticalScrollBar的信号valueChange(value+20),连接到了我们之前写的slot_ScrollWidget(int)槽上
  11. emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->value()+20);verticalScrollBar的信号valueChange(value+20);
  12. //设定滚动之后的滑块位置
  13. ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->value()+20);
  14. }
  15. else
  16. {
  17. emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->maximum());
  18. ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->maximum());
  19. }
  20. }
  21. else
  22. {
  23. //向上滚动
  24. if (ui->verticalScrollBar->value()-20>=0)
  25. {
  26. emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->value()-20);
  27. ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->value()-20);
  28. }
  29. else
  30. {
  31. emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->minimum());
  32. ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->minimum());
  33. }
  34. }
  35. }

这样,就实现了拖拽滑块或者鼠标滚轮来滚屏的功能

http://blog.csdn.net/shihoongbo/article/details/47103099

滚动条QScroolBar实现滚屏功能(屏幕过大,覆盖wheelEvent来处理滑轮事件)的更多相关文章

  1. Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)

    日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...

  2. CentOS系统里如何正确取消或者延长屏幕保护自动锁屏功能(图文详解)

    不多说,直接上干货! 对于我这里想说的是,分别从CentOS6.X  和  CentOS7.X来谈及. 1. 问题:默认启动屏幕保护 问题描述: CentOS系统在用户闲置一段时间(默认为5分钟)后, ...

  3. 帆软报表(finereport)实现自动滚屏效果

    例如Demo:IOS平台年度数据报表. 展示内容丰富,一个页面中存在多个图表.内容,超出了浏览器窗口的大小导致内容展示不全. 为了能够预览这个报表的全部内容,可以使用JS滚屏效果来实现. 操作步骤: ...

  4. Atitit截屏功能的设计解决方案

    Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,,  复制 ...

  5. 滚屏加载--jQuery+PHP实现浏览更多内容

    滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实 ...

  6. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇02:滚屏》

    2.滚屏 滚屏概述: 打飞机游戏场景背景设计通常很简单,因为角色敌人道具等都不与背景发生交互事件.开发者只需要根据设定的游戏类型,为游戏制作背景,模拟一个大环境即可. 滚屏原理: 材质UV动画,实现背 ...

  7. Android-锁屏功能

    当屏幕多久没有点击的时候,进行某种操作就是所谓的锁屏功能. onCreate: public void addRunnable() { handler.postDelayed(runnable, Co ...

  8. Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据

    使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载.这同样要实现OnScrollL ...

  9. javascript实现页面滚屏效果

    当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析.本示例在页面右侧有五个数字标签,代表五个 ...

随机推荐

  1. wget多进程抓取的实现

    把以前博客的东西夜迁移过来吧,这个是以前公司做的,原来放在csdn里面,先切过来. 用多进程实现的 wget多进程抓取的实现,有问题联系我 (微博:偶是周亮) #!/bin/bash url_path ...

  2. Html5 自定义数据属性

    html5 可以为元素添加自定义属性,但是要添加前缀data-.(下面这个例子中的自定义属性的命名,其实是不规范的,不应该包含大写字符,例如:data-myName 应改命名为:data-myname ...

  3. VSS的配置和使用

    目录:   〇. 摘要一. 开发前的准备二. 创建空的SourceSafe数据库三. 新建项目并加入版本控制四. 获取SourceSafe中的项目五. 版本控制的几个概念六. 版本控制项目的管理七. ...

  4. scanf函数和printf函数

    C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式 ...

  5. C - 字符识别?

    C - 字符识别? Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Sta ...

  6. 安卓里面JSON处理和JAVA SE里面的JSON包

    今天编译安卓项目遇到这个问题 com.android.dex.DexException: Multiple dex files define的解决办法 大致意思就是引用了 相同的包 在JAVA SE里 ...

  7. MySQL float 与decimal 各中的区别。

    想一个问题: 1/3+1/3+1/3=1.0 0.3+0.3+0.3 =0.9 想一想在小数的世界里要什么表示1/3呢!它的办法就是取一个与1/3十分接近的小数来代替:如上面例子中的0.3来代替1/3 ...

  8. Oracle 游标Cursor 的基本用法

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...

  9. protel99与win7兼容问题的解决方案

    一些用户大概都已经把自己的 PC 从 winXP 换到了 win7,在 win7 给我们带来的视觉上的冲击和功能上的更换.也不时的带来了各方面的软件兼容问题 ,而一般上的兼容都可以在 win7 的自动 ...

  10. 替换bmp图片中的颜色 good

    工作中,经常需要将bmp图片中的某个颜色修改为另外一种颜色.比如:将图片中的所有白色均修改成灰色. 平时都是拿画图板中的油漆桶工具一点一点的刷,费时又费力.(这么干好几年了 :( ) 今天抽空编了一个 ...