当前位置: 首页 > news >正文

KeyBoredEvent

键盘事件

按键事件

​ 按键事件在用户按下一个键时触发,在Qt中使用QKeyEvent类表示这种事件。当按下一个键时,Qt会自动创建一个QKeyEvent对象,并将其传递给相应的事件处理函数。QKeyEvent对象包含该事件的详细信息

按下的键值

键值是一个枚举值,用于表示被按下的键

  • 字母键:Qt::key_AQt::key_BQt::key_C
  • 数字键:Qt::key_0``Qt::key_1``Qt::key_2
  • 功能键:Qt::key_F1``Qt::key_F2``Qt::key_F3
  • 方向键:Qt::key_Left``Qt::key_Right``Qt::key_Up``Qt::key_Down
  • 特殊键:Qt::key_Enter``Qt::key_Escape``Qt::key_Space``Qt::key_Tab

键值可以用QKeyEvent::key()获得

按下的修饰键。是指那些用于修改其他键行为的键,主要是ShiftCtrlAlt
  • Qt::shiftModifier:Shift键
  • Qt::ControlModifier:Ctrl键
  • Qt::AltModifier:Alt键
  • Qt::MetaModifier:Windows键或者Command键
相应文本。指按下的键对应的字符
事件类型。QKeyEvent类同时表示按键事件和释放事件

释放事件

​ 释放事件在用户松开一个键时触发,在Qt中使用QKeyEvent类表示这种事件,事件类型不同。通过这种方式,把按键事件和释放键事件统一处理,从而化简事件处理逻辑。

​ 处理键盘事件通常通过重写按键事件和释放事件的处理函数来实现

code

widget.h

#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QPushButton>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();QPushButton*btn;protected://定义键盘按下事件voidkeyPressEvent(QKeyEvent*);private:Ui::Widget*ui;};#endif// WIDGET_H

widget.cpp

#include"widget.h"#include"ui_widget.h"#include<QString>#include<QKeyEvent>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);// 定义窗口与标题this->setWindowTitle(QString::fromLocal8Bit("键盘事件处理"));// 定义窗口大小为400*200,左上角的坐标显示在屏幕的50,50位置this->setGeometry(50,50,400,200);// 实例化按钮,定义上面文字为“可移动”btn=newQPushButton(QString::fromLocal8Bit("可移动"),this);btn->setGeometry(40,40,60,30);// 强迫Widget接收待定的按键信息(例如方向键),否则Widget不接收方向键信息setFocusPolicy(Qt::StrongFocus);}Widget::~Widget(){deleteui;}voidWidget::keyPressEvent(QKeyEvent*event){intx=btn->x();inty=btn->y();// 按键重复时不做处理,也就是屏蔽if(event->isAutoRepeat())return;// 通过event->key()读取键值switch(event->key()){caseQt::Key_Up:btn->move(x,y-10);break;caseQt::Key_Down:btn->move(x,y+10);break;caseQt::Key_Right:btn->move(x+10,y);break;caseQt::Key_Left:btn->move(x-10,y);break;caseQt::Key_N:if(event->modifiers()==Qt::ControlModifier){// 按下Ctrl+N,当前窗口中最大化setWindowState(Qt::WindowMaximized);}break;}QWidget::keyPressEvent(event);}
http://www.zskr.cn/news/164255.html

相关文章:

  • 二手回收一些业务概念
  • Open-AutoGLM安卓应用场景全景图:覆盖12类移动开发任务,你的项目也能立刻落地!
  • 如何监控TensorFlow镜像中GPU利用率和温度状态
  • AI智能体架构设计:MCP、A2A、AG-UI三大协议全解析!
  • 机器翻译系统搭建:基于TensorFlow镜像训练Seq2Seq模型
  • 安全审计:系统日志审计与分析,识别潜在威胁
  • AI安全与蒙昧时代:模型监管与开源之争
  • 提示词优化效率提升300%,Open-AutoGLM实战中的10个隐藏技巧
  • 算法工程师:AI算法、LLM开发、生成式人工智能面试题(2026通关指南)
  • 手把手教你部署Open-AutoGLM,阿里云环境下性能提升8倍的秘密
  • 70款H5游戏整合小游戏平台网站源码
  • 垂直领域的大模型应用探索:深度实测3款AI聊天回复工具的差异化表现
  • 无药守护童年:小儿推拿热门品牌推荐,家长安心之选 - 速递信息
  • 【开题答辩全过程】以 基于SpringBoot的智能家具物联网平台的设计与实现为例,包含答辩的问题和答案
  • 2025-2026北京婚姻家事律师事务所权威排行:四维评测体系下的TOP5精选 - 苏木2025
  • 【毕业设计】基于springboot的深圳市体育中心体育赛事管理(源码+文档+远程调试,全bao定制等)
  • 【专家亲授】Open-AutoGLM官方镜像源推荐(国内高速下载方案)
  • 从快手直播故障,看全景式业务监控势在必行!
  • Open-AutoGLM安卓集成难题破解:3大坑点+解决方案,99%新手都中招了
  • 使用TensorFlow镜像实现联邦学习保护用户隐私
  • 【开题答辩全过程】以 基于大数据的化妆品推荐系统为例,包含答辩的问题和答案
  • 使用TensorFlow镜像训练扩散模型(Diffusion Models)可行性探讨
  • 模型checkpoint保存频率如何影响训练效率?实战分析
  • Open-AutoGLM手机运行指南:仅需4个步骤,立即体验本地大模型
  • 2025最新!研究生必看8个AI论文平台测评与推荐
  • 【AI模型轻量化实战】:把Open-AutoGLM塞进手机的7种方法
  • 2025 年中国家装公司十强权威榜单:谁领跑行业新标杆 - 速递信息
  • centos 上,非管理员用户安装 miniconda
  • 使用TensorFlow镜像进行大规模超参数搜索的最佳方法
  • 8个降aigc工具推荐!研究生高效避坑指南