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


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

    #include

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

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

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

    在这里插入图片描述

    protected:
        virtual void keyPressEvent(QKeyEvent * event)Q_DECL_OVERRIDE;
    
    • 1
    • 2
    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()));
    	//}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    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()));
    		}
    		
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

  • 相关阅读:
    上N下P三极管推挽电路----》交越失真问题的解决
    String类
    vim 从嫌弃到依赖(20)——global 命令
    SCAN BASIC --- PARTII scan test
    Mac RabbitMq 安装
    Perl 和 StrawberryPerl 与 ActivePerl 的区别详解
    Linux基本认识及指令
    ArcGIS JS自定义Accessor,并通过watchUtils相关方法watch属性
    服务端程序员学css记录
    HTML5期末考核大作业,个人网站—— 程序员个人简历模板下载HTML+CSS+JavaScript
  • 原文地址:https://blog.csdn.net/lion_cxq/article/details/126295157