社区
Qt
帖子详情
Qt 鼠标滚轮响应问题
wsrlyk
2011-04-27 05:19:34
资源管理器、Visual Studio等软件(目前发现好像大部分软件都是),在具有焦点时,即使把鼠标移到焦点所在区域外面(如任务栏等),也能响应鼠标滚轮。
IE、ChromePlus等软件,必须把鼠标移到页面上,滚动滚轮时才会响应。移到别的地方就不行了
有道词典……它的索引栏属于第一种情况,索引栏右边的具体解释栏就属于第二种情况……
于是我想问第一种情况是怎么实现的……
我目前用Qt做界面,用的VisualStudio……啥都不做似乎是第二种情况
...全文
1298
13
打赏
收藏
Qt 鼠标滚轮响应问题
资源管理器、Visual Studio等软件(目前发现好像大部分软件都是),在具有焦点时,即使把鼠标移到焦点所在区域外面(如任务栏等),也能响应鼠标滚轮。 IE、ChromePlus等软件,必须把鼠标移到页面上,滚动滚轮时才会响应。移到别的地方就不行了 有道词典……它的索引栏属于第一种情况,索引栏右边的具体解释栏就属于第二种情况…… 于是我想问第一种情况是怎么实现的…… 我目前用Qt做界面,用的VisualStudio……啥都不做似乎是第二种情况
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wsrlyk
2011-05-01
打赏
举报
回复
Thx 诸位,尤其是dbzhang800 :)
wsrlyk
2011-05-01
打赏
举报
回复
Soga…………
[Quote=引用 11 楼 dbzhang800 的回复:]
引用 10 楼 wsrlyk 的回复:
good,对于单个spinbox的问题可以解决。
不过感觉对于两个spinbox,或者说资源管理器那种问题不太好搞定啊。因为资源管理器左右列表都会处理wheelEvent,所以第一时间就接受事件了
如果你是这样的要求的话,我们就不用考虑前面提到那种wheel特有的方法了,整个事情应该更简单了。你只需要给你的QApplication添加一个……
[/Quote]
dbzhang800
2011-05-01
打赏
举报
回复
[Quote=引用 10 楼 wsrlyk 的回复:]
good,对于单个spinbox的问题可以解决。
不过感觉对于两个spinbox,或者说资源管理器那种问题不太好搞定啊。因为资源管理器左右列表都会处理wheelEvent,所以第一时间就接受事件了
[/Quote]
如果你是这样的要求的话,我们就不用考虑前面提到那种wheel特有的方法了,整个事情应该更简单了。你只需要给你的QApplication添加一个事件过滤器,截获非焦点Widget的wheel事件然后send到焦点widget就行了。
或者你override掉QApplication的notify函数也可以。
dbzhang800
2011-04-29
打赏
举报
回复
前面的描述有些乱,重新整理了一下,发在了blog中:
QWheelEvent 使用分析一例
wsrlyk
2011-04-29
打赏
举报
回复
good,对于单个spinbox的问题可以解决。
不过感觉对于两个spinbox,或者说资源管理器那种问题不太好搞定啊。因为资源管理器左右列表都会处理wheelEvent,所以第一时间就接受事件了
[Quote=引用 8 楼 dbzhang800 的回复:]
引用 7 楼 wsrlyk 的回复:
额,虽然我自认为已经理解了你打星号的两句话的意思,但我还是没懂到底可不可以实现我说的…………
因为wheelEvent是很多widget都会处理的,但我想要的效果就是即使把鼠标移到可以处理wheelEvent的widget上,event依然发送给焦点。就好像资源管理器左边的树形列表和右边的文件列表这两个widget。
看那个解释似乎是不行的咯?
……
[/Quote]
wsrlyk
2011-04-29
打赏
举报
回复
好的,明天试试
[Quote=引用 8 楼 dbzhang800 的回复:]
引用 7 楼 wsrlyk 的回复:
额,虽然我自认为已经理解了你打星号的两句话的意思,但我还是没懂到底可不可以实现我说的…………
因为wheelEvent是很多widget都会处理的,但我想要的效果就是即使把鼠标移到可以处理wheelEvent的widget上,event依然发送给焦点。就好像资源管理器左边的树形列表和右边的文件列表这两个widget。
看那个解释似乎是不行的咯?
……
[/Quote]
dbzhang800
2011-04-29
打赏
举报
回复
[Quote=引用 7 楼 wsrlyk 的回复:]
额,虽然我自认为已经理解了你打星号的两句话的意思,但我还是没懂到底可不可以实现我说的…………
因为wheelEvent是很多widget都会处理的,但我想要的效果就是即使把鼠标移到可以处理wheelEvent的widget上,event依然发送给焦点。就好像资源管理器左边的树形列表和右边的文件列表这两个widget。
看那个解释似乎是不行的咯?
引用 5 楼 dbzhang800 的回……
[/Quote]
你肯定没看懂,因为我写完后,发现自己都看不懂啥意思。估计很多人会有疑问,所以整理到了blog中。
其实答案一直都是明确的:你的要求可以实现。
wsrlyk
2011-04-29
打赏
举报
回复
额,虽然我自认为已经理解了你打星号的两句话的意思,但我还是没懂到底可不可以实现我说的…………
因为wheelEvent是很多widget都会处理的,但我想要的效果就是即使把鼠标移到可以处理wheelEvent的widget上,event依然发送给焦点。就好像资源管理器左边的树形列表和右边的文件列表这两个widget。
看那个解释似乎是不行的咯?
[Quote=引用 5 楼 dbzhang800 的回复:]
引用 4 楼 wsrlyk 的回复:
给个实际例子吧:
在VS里用Qt新建一个含mainwindow的项目,然后里面添加一个spinbox。除此之外啥都不做。
运行后,鼠标在spinbox内的时候,滚轮有效,移到spinbox外,无效。
在这种情况下,如何使滚轮在spinbox外对其有效?
引用 3 楼 chenmoc1w2 的回复:
but if that wid……
……
[/Quote]
wsrlyk
2011-04-28
打赏
举报
回复
理论上是的。那我如果鼠标移到任务栏上呢?
我给个实际例子吧:
在VS里用Qt新建一个含mainwindow的项目,然后里面添加一个spinbox。除此之外啥都不做。
运行后,鼠标在spinbox内的时候,滚轮有效,移到spinbox外,无效。
在这种情况下,如何使滚轮在spinbox外对其有效?
[Quote=引用 3 楼 chenmoc1w2 的回复:]
but if that widget does not handle the event they are sent to the focus widget.
[/Quote]
dbzhang800
2011-04-28
打赏
举报
回复
[Quote=引用 4 楼 wsrlyk 的回复:]
给个实际例子吧:
在VS里用Qt新建一个含mainwindow的项目,然后里面添加一个spinbox。除此之外啥都不做。
运行后,鼠标在spinbox内的时候,滚轮有效,移到spinbox外,无效。
在这种情况下,如何使滚轮在spinbox外对其有效?
引用 3 楼 chenmoc1w2 的回复:
but if that wid……
[/Quote]
呵呵,和我原来的理解一样。理解成了一种事件转发。
这个理解是错误的,因为转发只会向上层转发(http://hi.baidu.com/cyclone/blog/item/fe6ab3de0e9f2155ccbf1aea.html)。
可以看看这篇文章“事件循环”一节 前面的一段,解释了这段话的含义(以及focus的widget指代的什么)
http://blog.csdn.net/dbzhang800/archive/2011/04/28/6370300.aspx
* 首先发送给当前光标下的widget(如果它的各种事件过滤器没将其过滤,而且event和wheelEvent也没accept它,事件会向上层窗体转发,直到top widget)。
* 经历上面所有的操作后,如果QWheelEvent事件仍未被处理,则会派发到 QApplication::focusWidget() 窗体(该窗体中,同样会经历事件过滤等等东西)
yuliang_87
2011-04-27
打赏
举报
回复
but if that widget does not handle the event they are sent to the focus widget.
wsrlyk
2011-04-27
打赏
举报
回复
那是不是说就没办法实现鼠标移到别的地方依然能控制焦点widget了?
但我觉得这是很普遍的一个功能啊…………
[Quote=引用 1 楼 dbzhang800 的回复:]
QWheelEvent 中说的清楚:
Wheel events are sent to the widget under the mouse cursor, but if that widget does not handle the event they are sent to the focus widget.
[/Quote]
dbzhang800
2011-04-27
打赏
举报
回复
QWheelEvent 中说的清楚:
Wheel events are sent to the widget under the mouse cursor, but if that widget does not handle the event they are sent to the focus widget.
Qt
鼠标
键盘
响应
事件示例
qt
鼠标
、键盘
响应
事件示例,有
鼠标
跟踪
响应
、
鼠标
移动
响应
、
鼠标
点击相应、
鼠标
滚轮
响应
,键盘点击
响应
等源代码,跟初学者分享
Ubuntu16.04
qt
opencv3.1 打开文件夹图像 样本分类工具
鼠标
操作
Ubuntu16.04
qt
调用opencv,打开文件夹图像存入vector,将图像和图像路径显示在界面窗口,
鼠标
滚轮
进行图像切换,左键保存当前图像于Result文件夹中,右键删除当前文件。注:1.process按钮没有功能
响应
,自己添加 2....
QT
高级编程
QT
界面美化QSS
QT
网络编程
QT
绘图
QT
多线程视频课程
QT
课程学习目标这套
QT
课程体系是为准备从事以下软件工程师岗位工作的学员群体精心研发的。
QT
软件工程师
QT
高级软件工程师
QT
课程技术模块
QT
核心技术概念
QT
图形窗口编程技术
QT
QSS界面美化实战技术
QT
实用框架编程技术
QT
课程学习路线
QT
核心基础概念体系编程实践
QT
Widgets图形窗口编程基础体系编程实践
QT
基础控件和高级复杂控件体系编程实践
QT
布局管理体系编程实践
QT
模型视图代理框架编程实践
QT
QSS式样表编程实践
QT
界面美化编程实践
QT
文件IO框架编程实践
QT
绘图框架编程实践
QT
图形视图框架编程实践
QT
网络框架编程实践
QT
多线程框架编程实践
QT
线程池框架编程实践
QT
并发库框架编程实践
QT
课程推荐章节
QT
控件美化界面美化是这套
QT
课程中的特色亮点,是
QT
软件工程师在工作实践中可以直接参考应用的,推荐认真学习。
QT
QSS基础控件界面美化
QT
QSS高级控件界面美化
QT
QSS其它控件界面美化
QT
QSS窗口组合界面美化
QT
QSS主窗口界面美化
Qt
响应
Ctrl、
鼠标
滚轮
、字母等组合按键
在
Qt
应用程序中,我们经常需要对用户的按键事件进行
响应
,包括单个按键、组合按键以及
鼠标
滚轮
事件。运行应用程序后,您可以在窗口中按下Ctrl键、
鼠标
滚轮
键或字母键,然后观察文本框中的输出。类将键码转换为对应的...
Qt
鼠标
滚轮
、左键按下并移动事件
继承 class QWidget 类,重写
鼠标
响应
事件虚函数: private: virtual void mousePressEvent(QMouseEvent * event); virtual void mouseMoveEvent(QMouseEvent * event); void ViewWidget::mousePressEvent...
Qt
16,216
社区成员
26,595
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章