Qt之键盘事件监听-实时响应大小写Capslock按键

本文介绍了在Qt中实现实时监听键盘Capslock状态的三种方法:重写QLineEdit、全局应用程序事件过滤和Windows钩子。通过Windows钩子实现了即使程序失去焦点也能监听键盘大写状态的功能。
摘要由CSDN通过智能技术生成


原文链接: Qt之键盘事件监听-实时响应大小写Capslock按键

一、开篇

假期总是转眼即逝,想想今天就是中秋节最后一天了,明天又要开始挤地铁了,好像还有一篇文章需要完成,前一段时间做了一个小功能,当用户输入密码时,如果键盘开启了大写,则需要重点提示用户,否则有些用户可能会误以为自己密码输入错误。

今天博主就来分析下当时的实现过程。

本篇文章主要讲解怎么实现实时监听大小写的过程,其他内容不做详细说明。文章分析的主线路是按博主当时完成此项功能的一个思路,虽然最后的解决方案才是对的,但前边一些尝试性的解决方案,博主这里还是都写了下来。一方面可以避免大家再去做无用的尝试,另一方面也是对自己实现这一功能时的一个总结。

二、效果展示

按照惯例先上图,看看是不是同学们想想中的效果。

三、实现思路

以下分几个小结来分析博主当时实现大小写监听的一个思路,虽然前两种方式不能达到最后的需求,但是大家也可以看看,或许他更适合于你另一种需求下的场景呢!

在讲各种实现方案时,我们先来搞清楚怎么获取当前键盘是否开启了大写,方法比较简单,只修要通过LOBYTE(GetKeyState(VK_CAPITAL))函数即可获取。

最终我们的键盘相应函数可能会像下面这样,当发现了键盘按下(抬起)事件时,我们就调用这个函数重新设置大写提示

void CPasswordEdit::UpdateCapslockTip()
{
	if (LOBYTE(GetKeyState(VK_CAPITAL)) == false)
	{
		m_ActCaps->setIcon(QIcon(":/PasswordWidget/64.png"));
	}
	else
	{
		m_ActCaps->setIcon(QIcon());
	}
}

知道了如何判断是否开启键盘大写后,下一步就是需要搞清楚这个函数的触发时机,下面是博主的各种尝试过程。

1、重写QLlinEdit

要监听键盘事件,博主第一时间想到的就是继承这个控件,重写该控件的键盘回调函数,当该回调函数被触发时,就是有键盘按键被按下。

virtual void keyPressEvent(QKeyEvent * event) override;
virtual void keyReleaseEvent(QKeyEvent * event) override;

以上两个函数就是我们需要重写的两个按钮回调函数,函数的实现比较简单,判断当前是否是大小写按钮事件,如果有就执行UpdateCapslockTip函数,更新当前给用户的提示。

void CPasswordEdit::keyPressEvent(QKeyEvent * event)
{
	if (event->key() == Qt::Key_CapsLock)
	{
		UpdateCapslockTip();
	}

	QLineEdit::keyPressEvent(event);
}

void CPasswordEdit::keyReleaseEvent(QKeyEvent * event)
{
	if (event->key() == Qt::Key_CapsL
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值