news 2026/4/23 14:02:29

KeyBoredEvent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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);}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:30:21

如何将TensorFlow镜像整合进企业内部AI平台

如何将TensorFlow镜像整合进企业内部AI平台 在金融风控建模、工业质检系统或医疗影像分析等关键业务场景中&#xff0c;一个常见的挑战是&#xff1a;算法团队在本地训练好的模型&#xff0c;部署到生产环境后却频繁出现性能下降甚至无法运行的问题。这种“在我机器上能跑”的窘…

作者头像 李华
网站建设 2026/4/22 15:49:07

机器翻译系统搭建:基于TensorFlow镜像训练Seq2Seq模型

机器翻译系统搭建&#xff1a;基于TensorFlow镜像训练Seq2Seq模型 在多语言内容爆炸式增长的今天&#xff0c;如何让一句英文瞬间变成准确流畅的中文&#xff0c;而不依赖第三方平台&#xff1f;这不仅是用户的需求&#xff0c;更是企业构建自主AI能力的关键一步。许多团队在尝…

作者头像 李华
网站建设 2026/4/23 12:18:20

如何通过Dockerfile定制自己的TensorFlow镜像版本

如何通过Dockerfile定制自己的TensorFlow镜像版本 在AI工程落地的过程中&#xff0c;你是否曾遇到过这样的场景&#xff1a;本地训练好一个模型&#xff0c;信心满满地提交代码&#xff0c;CI流水线却报错“ImportError: tensorflow not found”&#xff1f;又或者&#xff0c…

作者头像 李华