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

QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中

都是虚函数在头文件中声明了 需要类外重现实现

如果头文件中声明 类外无实现就会报错

void Widget::keyPressEvent(QKeyEvent *event)
{switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w";break;case Qt::Key_S:qDebug()<<"按下S";break;}qDebug()<<"按下";
}void Widget::keyReleaseEvent(QKeyEvent *event)
{switch (event->key()) {//获取按键case Qt::Key_Up://获取小键盘qDebug()<<"按下shang";break;case Qt::Key_Down:qDebug()<<"按下下";break;case Qt::Key_Left:qDebug()<<"按下下";break;case Qt::Key_Right:qDebug()<<"按下右";break;}

鼠标进入和离开事件 鼠标进入窗口 和离开窗口时

判断是左键还是右键

鼠标按下

event->pos    event->globalpos

位置

使用键盘事件控制图片的移动:

.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>
#include <QPixmap>
#include <QPoint>class MyWidget : public QWidget
{Q_OBJECTpublic:explicit MyWidget(QWidget *parent = nullptr);protected:void keyPressEvent(QKeyEvent *event) override;void paintEvent(QPaintEvent *event) override;private:QPixmap m_image; // 存储图片QPoint m_position; // 图片的位置
};#endif // MYWIDGET_H

.cpp文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),m_image("://png_icon/dog.png"),
m_position(50,50)
{ui->setupUi(this);setFixedSize(400,600);}Widget::~Widget()
{delete ui;
}
void  Widget:: keyPressEvent(QKeyEvent *event)
{int moveStep = 10; // 移动步长switch (event->key()) {case Qt::Key_W:m_position.ry() -= moveStep;break;case Qt::Key_S:m_position.ry() += moveStep;break;case Qt::Key_A:m_position.rx() -= moveStep;break;case Qt::Key_D:m_position.rx() += moveStep;break;default:QWidget::keyPressEvent(event);return;}// 限制移动范围m_position.setX(qBound(0, m_position.x(), width() - m_image.width()));m_position.setY(qBound(0, m_position.y(), height() - m_image.height()));update(); // 触发重绘
}void Widget:: paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.drawPixmap(m_position, m_image);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 画菱形(曼哈顿距离)
  • 【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?
  • mysql中B+树的数据存储
  • 【MySQL】最左前缀匹配原则
  • zdppy+vue3+onllyoffice开发文档管理系统项目实战 20240808 上课笔记
  • Java中的分布式日志与追踪
  • Postman Pre-request Script
  • 【Vue3】Pinia存储及读取数据
  • [Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升
  • 07、MySQL-多表查询
  • 关于重复提交
  • k8s—Prometheus+Grafana+Altermaneger构建监控平台
  • 2024年软件测试八股文(含答案+文档)
  • Qwen2-7b+AnythingLLM+ollama 部署API调用
  • Linux 进程概念
  • SegmentFault for Android 3.0 发布
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • AHK 中 = 和 == 等比较运算符的用法
  • docker python 配置
  • ECS应用管理最佳实践
  • LeetCode29.两数相除 JavaScript
  • Redis字符串类型内部编码剖析
  • REST架构的思考
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue:响应原理
  • 给第三方使用接口的 URL 签名实现
  • 检测对象或数组
  • 近期前端发展计划
  • 使用 QuickBI 搭建酷炫可视化分析
  • 学习JavaScript数据结构与算法 — 树
  • 学习Vue.js的五个小例子
  • 白色的风信子
  • HanLP分词命名实体提取详解
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​configparser --- 配置文件解析器​
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • # Apache SeaTunnel 究竟是什么?
  • #WEB前端(HTML属性)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (35)远程识别(又称无人机识别)(二)
  • (day6) 319. 灯泡开关
  • (LeetCode 49)Anagrams
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)3D模板阴影原理
  • (转)ObjectiveC 深浅拷贝学习
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET成年了,然后呢?
  • .net后端程序发布到nignx上,通过nginx访问