QT笔记

阅读: 评论:0

QT笔记

QT笔记

键盘焦点

1. 获得焦点

设置小部件是否可以获得焦点,或以何种方式获得焦点。方式有两个:

  1. setFocus()函数被调用时,键盘焦点将会即时转移到该小部件下(如果小部件的直接或间接parent部件处于激活状态)。其带参数的重载函数setFocus(Qt::FocusReason reason)对是否获得焦点做了一个限定,必须满足reason的情况才可获得焦点(同时仍然需要满足小部件的直接或间接parent部件处于激活状态)。
  2. setFocusPolicy(Qt::FocusPolicy policy)函数用来设置什么样的操作可以获得焦点。这些“操作”通过枚举Qt::FocusPolicy来指定:
FocusPolicy::ClickFocus表示鼠标点击小部件时会获得焦点
FocusPolicy::TabFocus表示可通过Tab键切换可获得焦点
FocusPolicy::WheelFocus表示可通过鼠标滚轮切换获得焦点
FocusPolicy::NoFocus不可获得焦点(默认设置)

2. 焦点代理 

setFocusProxy()函数的作用是, 当前窗口接收到焦点时, 将交由指定的窗口来代理, 函数原型如下:

void QWidget::setFocusProxy(QWidget * w);

3. 清除焦点 

clearFocus()函数负责即时清除小部件上的焦点(如果有的话)。

4. 焦点事件函数

focusInEvent()函数和focusOutEvent()函数在当前小部件获得焦点或失去焦点时自动被调用, 为虚函数。QFocusEvent 为其形参类型,QFocusEvent::reason()函数返回一个枚举类型Qt::FocusReason,该枚举用于表示小部件是以何种方式失去或得到的焦点。

一个focusInEvent()函数的重写示例如下:

virtual void focusInEvent(QFocusEvent * event)
{switch (event->reason()) {case Qt::FocusReason::MouseFocusReason:cout << "焦点来自鼠标点击" << endl;break;case Qt::FocusReason::TabFocusReason:cout << "焦点来自Tab键切换" << endl;break;case Qt::FocusReason::MenuBarFocusReason:cout << "焦点来自菜单栏展开" << endl;break;case Qt::FocusReason::PopupFocusReason:cout << "焦点来自窗口弹出" << endl;break;default:break;}
}

焦点事件QFocusEventreason()函数返回值是由用户调用焦点设置函数setFocus()或setFocus(Qt::FocusReason reason)决定的。

reason()函数返回值整理如下表:

用户调用的焦点设置函数reason()函数的返回值
setFocus()Qt::FocusReason::OtherFocusReason

setFocusPolicy(Qt::FocusPolicy::ClickFocus)

或是其它FocusPolicy类型参数

Qt::FocusReason::MouseFocusReason

或是其它与FocusPolicy参数对应的FocusReason类型参数

setFocus(Qt::FocusReason reason)reason
未调用任何焦点设置函数Qt系统自动判别FocusReason类型

本文发布于:2024-01-28 07:12:33,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063971595702.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:笔记   QT
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23