QT笔记——QT组合键 成为 快捷键

我们需要 快捷键 来使 触发 功能,这时候 我们需要 QT的组合键来完成

#include <QKeyEvent>

key() 是 键盘按下的单键 基本包括了整个键盘的键

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

modifiers() 是 组合热键 使用 包括 ctrl ,shift ,alt等

在这里插入图片描述

protected:
    virtual void keyPressEvent(QKeyEvent * event)Q_DECL_OVERRIDE;
void CompositekeyShortcuts::keyPressEvent(QKeyEvent* event) 
{
	//组合键 响应
	if (event->key() == Qt::Key_B && event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier))
	{
		QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("Ctrl + shift + B"));

	}
	else if (event->modifiers() == (Qt::AltModifier | Qt::ControlModifier))
	{
		QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("Ctrl + Alt"));
	}
	else if (event->key() == Qt::Key_A && event->modifiers() == (Qt::AltModifier | Qt::ControlModifier))
	{
		QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("Ctrl + Alt + A"));
	}

	//单个键盘 按下发生
	//if (event->key() == Qt::Key_B)
	//{
	//	QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("%1").arg(event->text()));
	//}
	//else if (event->key() == Qt::Key_Shift)
	//{
	//	// event->text() 不能打印出来  shift  为空白
	//	QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("%1").arg(event->text()));
	//}

event->text() 可以区分 大小写的 字母 如下

在这里插入图片描述
在这里插入图片描述

event->text() 不能区分 shift 单键 打印的为空

在这里插入图片描述

组合 键 ctrl + shift + B

在这里插入图片描述

组合 键 ctrl +Alt

在这里插入图片描述

组合 键 ctrl +Alt + A 不能打印出任何东西 ,它被QQ的全局热键所占用;当我们退出QQ时 有效; 但是 我们还需要注释掉 组合键 ctrl + ALt 否则 会显示他们两的热键,而不会选择 ctrl + alt +A

在这里插入图片描述

正常显示如下如:
在这里插入图片描述
我们发现有一个 问题 ,就是我们长按一个 按钮的时候 会一直 打印一个信息
我们怎么解决呢?

event->isAutoRepeat() 这个函数 判断的是 是否自动触发 如果是
keyPressEvent 事件 那么按下就是 我们按下的 松开 是自动触发的(相当于,我们长按一个键,系统又帮我们自动触发松开事件)
在没松开键的时候只有第一下 是为false :后面都是自动触发 isAutoRepeat 就为true

	//单个键盘 按下发生
	if (event->key() == Qt::Key_B)
	{
		if (event->isAutoRepeat())
		{
			QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("%1").arg(QStringLiteral("自动触发")));
		}
		else 
		{
			QMessageBox::information(nullptr, QStringLiteral("信息"), QStringLiteral("%1").arg(event->text()));
		}
		
	}

参考博客:
键盘按下事件 组合键
长按一个键 不松 会一直打印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值