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类型

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值