滚动条QScroolBar实现滚屏功能(屏幕过大,覆盖wheelEvent来处理滑轮事件)
环境:Qt5
编译器:Qt Creator
需求:如图
显示区域win 600*300
需要显示的Widget控件show 590*550
则有600*250的show界面无法显示
使用滑块控制show界面滚动显示全部内容
实现过程:
增加水平滑块verticalScroolBar (10*300)控件
注意:verticalScroolBar不要放在show控件上,而是show、verticalScroolBar两个控件同时以win界面为父界面水平摆放
第一步:实现拖拽滑块滚动show界面
连接信号与槽
声明一个滑块响应槽
- private slots:
- slot_ScroolWidget(int);
- connect(ui->verticalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(slot_ScroolWidget(int)));
verticalScrollBar的信号valueChagned(int)发送来一个int参数
该参数指明当前滑块所在的位置
其中,滑块长度恒定为0-100,而该参数就是介于0-100之间
槽函数实现
- void fun::slot_ScroolWidget(int value)
- {
- double p=static_cast<double>(value)/static_cast<double>(ui->verticalScrollBar->maximum());
- ui->background->move(0,-(ui->background->height()-350)*p);
- }
获得滑块的位置value
计算一个比例因子p=滑块的位置/滑块的最大位置
利用比例因子p,调用show的成员函数move来移动相应的位置
到此,滑块滚屏的基本功能已经实现了
但是,一般来说,更顺手使用鼠标滚轮来进行滚屏
所以,我们还需要重载wheelEvent()事件来实现此功能
- void fun::wheelEvent(QWheelEvent *event)
- {
- int para=event->angleDelta().y();//获得鼠标滚轮的滚动距离para,para<0向下滚动,>0向上滚动
- if (para<0)
- {
- //向下滚动,设定鼠标滚轮每滚动一个单位,滑块就移动20个单位
- //加入此判断的理由是,若当时滑块处于90的位置上,一旦继续下滑20个单位,就会超过最大范围100,show界面就会移动超出范围。
- if (ui->verticalScrollBar->value()+20<=100)
- {
- //发射verticalScrollBar的信号valueChange(value+20),连接到了我们之前写的slot_ScrollWidget(int)槽上
- emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->value()+20);verticalScrollBar的信号valueChange(value+20);
- //设定滚动之后的滑块位置
- ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->value()+20);
- }
- else
- {
- emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->maximum());
- ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->maximum());
- }
- }
- else
- {
- //向上滚动
- if (ui->verticalScrollBar->value()-20>=0)
- {
- emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->value()-20);
- ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->value()-20);
- }
- else
- {
- emit ui->verticalScrollBar->valueChanged(ui->verticalScrollBar->minimum());
- ui->verticalScrollBar->setSliderPosition(ui->verticalScrollBar->minimum());
- }
- }
- }
这样,就实现了拖拽滑块或者鼠标滚轮来滚屏的功能
http://blog.csdn.net/shihoongbo/article/details/47103099
滚动条QScroolBar实现滚屏功能(屏幕过大,覆盖wheelEvent来处理滑轮事件)的更多相关文章
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- CentOS系统里如何正确取消或者延长屏幕保护自动锁屏功能(图文详解)
不多说,直接上干货! 对于我这里想说的是,分别从CentOS6.X 和 CentOS7.X来谈及. 1. 问题:默认启动屏幕保护 问题描述: CentOS系统在用户闲置一段时间(默认为5分钟)后, ...
- 帆软报表(finereport)实现自动滚屏效果
例如Demo:IOS平台年度数据报表. 展示内容丰富,一个页面中存在多个图表.内容,超出了浏览器窗口的大小导致内容展示不全. 为了能够预览这个报表的全部内容,可以使用JS滚屏效果来实现. 操作步骤: ...
- Atitit截屏功能的设计解决方案
Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,, 复制 ...
- 滚屏加载--jQuery+PHP实现浏览更多内容
滚屏加载技术,就是使用Javascript监视滚动条的位置,每次当滚动条到达浏览器窗口底部时,触发一个Ajax请求后台PHP程序,返回相应的数据,并将返回的数据追加到页面底部,从而实现了动态加载,其实 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇02:滚屏》
2.滚屏 滚屏概述: 打飞机游戏场景背景设计通常很简单,因为角色敌人道具等都不与背景发生交互事件.开发者只需要根据设定的游戏类型,为游戏制作背景,模拟一个大环境即可. 滚屏原理: 材质UV动画,实现背 ...
- Android-锁屏功能
当屏幕多久没有点击的时候,进行某种操作就是所谓的锁屏功能. onCreate: public void addRunnable() { handler.postDelayed(runnable, Co ...
- Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据
使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载.这同样要实现OnScrollL ...
- javascript实现页面滚屏效果
当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析.本示例在页面右侧有五个数字标签,代表五个 ...
随机推荐
- 微信支付 v 3.3.6
文字说明: 前提:注册.申请服务号,开通微信支付. 涉及到的参数:AppId.AppSecret.原始ID(自动回复).mch_id(商户号).Key(商户密钥:自己设定.) 统一规范: 要求 认证方 ...
- JavaSE复习日记 : 实例化对象/构造方法和this关键字
/* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...
- 我使用过的Linux命令
我使用过的Linux命令之tee - 重定向输出到多个文件 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出 ...
- php ZIP压缩类实例分享
php ZIP压缩类实例分享 <?php $zipfiles =array("/root/pooy/test1.txt","/root/pooy/test2.txt ...
- HDU4323-Magic Number(levenshtein distance-编辑距离)
描述: There are many magic numbers whose lengths are less than 10. Given some queries, each contains a ...
- hdu 4493 Tutor
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4493 给你十二个月的工资,算平均数,保留两位,去除末尾的0 使用暴力解决,嘻嘻,但是这题主要是在进位这个地 ...
- 谷歌日志库GLog 使用说明
1 引用头文件 加载库 #include <glog/include/logging.h> #pragma comment(lib,"libglog.lib") 2 初 ...
- 10个必备的移动UI设计资源站
http://www.uisdc.com/10-necessary-mobile-ui-design-resources# 交互设计中如何增加趣味性.提升愉悦http://www.uisdc.com/ ...
- Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh
Hyperpolyglot Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh grammar | quoting and escaping | charactersvar ...
- VS2010/MFC对话框:向导对话框的创建及显示
向导对话框的创建及显示 本节将为大家演示如何创建向导对话框. 仍然以前面的“加法计算器”的例子为基础,在其中加入向导对话框,我们可以用它来说明加法计算器的使用方法,一步一步引导用户操作,这也是比较常见 ...