滚动条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实现页面滚屏效果
当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析.本示例在页面右侧有五个数字标签,代表五个 ...
随机推荐
- 交互设计师谈颠覆式创新 | Think different
作者:Teambition 交互设计师 樊伟 本文由 Teambition 原创.转载请注明出处,附原文链接 题图:by Ed Chao 我们不需要像主流市场的大公司一样做类似相扑的庞大,而是需要像柔 ...
- WCF遇到Oracle问题
解决 选中下图中对网站和项目使用IIS….64位版
- WinForm中快捷键与组合按键的设置方法
每个窗体都有这样3个事件:KeyDown.KeyPress.KeyUp,KeyDown和KeyPress都是按键按下事件,但KeyDown用的是KeyCode跟键盘各个按键相对应,它对应Keys枚举, ...
- Struts2拦截器总结
拦截器的本质: 拦截器就是一个类,一个实现了超级接口Interceptor的类.Interceptor接口里定义了三个方法 init(),destory(),intercept().其中inercep ...
- C/C++中使用的正则表达式库
正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则引擎主要可以分 ...
- js函数绑定同时,如何保留代码执行环境?
经常写js的程序员一定不会对下面这段代码感到陌生. var EventUtil = { addHandler : function(element, type, handler){ if(elemen ...
- Delphi 2010下载+完美破解
点击链接进入http://altd.embarcadero.com/download/RADStudio2010/delphicbuilder_2010_3615_win.isoRAD Studio/ ...
- java 构造方法 constructor demo笔记
demo 地址 http://pan.baidu.com/s/1bo2FG1T package com.ws.study; /** * @author Administrator * */ publi ...
- 如何使用Excel和Word编辑和打印条形码
本文介绍如何使用Microsoft Office Excel 2007和Microsoft Office Word 2007进行条形码的编辑后,通过普通的办公打印机将条形码打印出来. 对于少量,简单的 ...
- [置顶] SpecDD(混合的敏捷方法模型)主要过程概述
敏捷已成为当今使用最广泛的开发方法.有趣的是,敏捷方法的流行性并不是因为它取代了其他开发方法,相反它与这些方法进行了更好地融合.现实世界众多敏捷项目的成功,也证明了敏捷将走向杂化的未来. SpecDD ...