【快速上手QT】06-检测按键检测鼠标

news2025/2/23 17:19:06

今天聊聊事件,实际上我们在前两篇文章中就已经接触到了事件,分别是定时器事件和绘画事件,今天我们再来看看其他的事件。

我们打开QT助手,在QWidget的界面中找到下图中的地方。

我们可以看到很多函数的结尾都是Event,那么这些就是事件函数了。

检测键盘输入

上篇文章的末尾提了一嘴这个,我们知道怎么检测键盘输入之后再结合之前文章介绍过的内容,那么就足够跟着我更之前的文章去写一些小游戏什么的了。

从函数名中我们也不难看出,我们需要用到的是下面这个。

凭借我高超的英语水平(四级差122分),一眼就能看出第一个事件函数是键盘按下的时候触发,而第二个是键盘按下之后松开时触发的。

我们大多数情况下是用第一个,但是第二个偶尔也有应用场景,大家需要时再查QT助手即可,接下来我们就小小地测试一下键盘按下事件。

#include "Zhetu.h"
#include <qdebug.h>

void Zhetu::keyPressEvent(QKeyEvent* event) {
	qDebug() << "hello world";
}

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
}

Zhetu::~Zhetu()
{}

我们每次按下按键的时候都会触发keyPressEvent这个事件函数,但是还有一点,那就是我们目前无法判断我们按下的具体是哪个按键。

这时候我们就需要用到这个函数的参数QKeyEvent了。

我们再用QT助手去找找这个东西。

它有两个方法吸引住了我的目光,一个是key,另一个是text,大概可以猜出来这两个方法可以帮助我们判断我们按下的是什么,我们再来试一试,记得要包含头文件。

#include "Zhetu.h"
#include <qdebug.h>

#include <QKeyEvent>
void Zhetu::keyPressEvent(QKeyEvent* event) {
	qDebug() << event->key() << "    " << event->text();
}

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
}

Zhetu::~Zhetu()
{}

可以看的出来key获取的是一个数值,每个按键都对应一个特定的数值,而text可以获取按键的名字。有一个问题就是text只能获取数字和字母的名字,当我按下特殊按键例如上下左右,ctrl,shift等按键时,text返回的就是空字符串了。

综上所述,我们一般使用key这个方法去判断按下的按键是什么。

但是key返回的是数字,看起来很不直观,这个我们再在QT助手中寻找一下有没有解决方法。

什么意思我看不懂,但是大抵可以猜出Qt::Key很关键,我们再次点击链接进去。

接下来便一目了然了,QT为我们准备了很多宏定义来代替那些数值,我们可以使用这些宏定义更直观地来比较通过key获取到的代表按键的数值。

检测鼠标

除了按键之外,我们还有很多关于鼠标的事件函数。

以鼠标移动为例,因为我之前写过一个QT井字棋,在那里面我做了一个设计,那就是鼠标的位置会跟随一个小棋子,那就是通过鼠标移动事件去实现的。

当我们的鼠标移动了,那么这个事件就会触发。当然,更重要的还是我们需要获取到我们的鼠标移动到哪里了,这个就是需要靠这个事件函数的参数QMouseEvent了。

可以看得出来我们主要靠的就是这俩函数,可以帮助我们获取x轴和y轴的坐标,我们来测试一下。

#include "Zhetu.h"
#include <qdebug.h>

#include <QMouseEvent> 

void Zhetu::mouseMoveEvent(QMouseEvent* event) {
	qDebug() << event->x() << "  " << event->y();
}

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
}

Zhetu::~Zhetu()
{}

可以发现好像并没有效果,只有当我们鼠标按下的时候移动,这个事件函数才会触发。

那我们想要的实际上是无论我的鼠标什么状态,只要它移动,我都要触发这个函数,那么我们还需要在主界面的构造函数里另外加一行代码。

setMouseTracking(true);

这样,每次鼠标移动的时候就可以触发鼠标移动事件函数了。

那我是怎么知道需要加这一行的呢,答案在这边。

小结

以上就是今天要分享的内容,其他的事件使用起来也大差不差,我们只需要查阅QT助手即可。大家还是需要自己去多加练习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1478068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日本极致产品力|200人的小型家族企业,如何年销7亿块巧克力?

蒂罗尔巧克力是日本经典的巧克力品牌。糖果业务是其早期的主营业务&#xff0c;在主营业务下滑的情况下&#xff0c;确立新的竞争方向、打造新产品、寻找新方法&#xff0c;成就巧克力极致产品力重回增长。 竞争环境变化&#xff1a;糖果主营业务持续下滑 始于1903年的松尾株式…

云原生架构技术揭秘:探索容器技术的奥秘

云原生的概念和演进都是围绕云计算的核心价值展开的&#xff0c;比如弹性、自动化、韧性&#xff0c;所以云原生所涵盖的技术领域非常丰富。 随着云计算技术的不断发展&#xff0c;云原生架构已经成为了新一代软件开发的重要趋势。本文将为您介绍云原生架构的相关技术&#xf…

产品经理岗位的任职资格和职业规划

产品经理主要是商业银行以客户为导向的&#xff0c;具体负责组织银行某一金融产品线的创新设计、生产营销和管理服务的工作。这类人士主要负责应用实施工作&#xff0c;其中产品线由一系列的产品构成&#xff0c;公司的产品经理主要分为全过程产品创新设计专家、全过程产品生产…

Decision Transformer

DT个人理解 emmm, 这里的Transformer 就和最近接触到的whisper一样,比起传统Transformer,自己还设计了针对特殊情况的tokens。比如whisper里对SOT,起始时间,语言种类等都指定了特殊tokens去做Decoder的输入和输出。 DT这里的作为输入的Tokens由RL里喜闻乐见的历史数据:…

QtCreator报Failed to parse qmlimportscanner output解决

错误如下: 定位错误位置 增加错误信息打印 打印执行命令 执行打印输出的命令,成功返回JSON 但输出的JSON对象不是json格式,而是命令 增加$$成功输出JSON 使用QtCreator12编译一次后,再使用QtCreator13成功编译通过,问题解决

Floyd算法、Dijkstra算法、基础拓扑排序

Floyd算法 Dijkstra算法 基础拓扑排序

TikTok运营应该使用什么IP?网络问题大全

想要迈过TikTok新手门槛&#xff0c;首先必须要学习的就是网络问题。很多人开始做TikTok账号或者TikTok小店时&#xff0c;都会遇到一些先前没有遇到的词汇和概念&#xff0c;比如原生IP&#xff0c;独享IP&#xff0c;甚至专线&#xff0c;那么一个IP可以做几个账号呢&#xf…

编译 qsqlmysql.dll QMYSQL driver not loaded

Qt 连接MySQL数据库&#xff0c;没有匹配的qsqlmysql.dll, 需要我们跟进自己Mysql 以及QT版本自行编译的。异常如下图&#xff1a; 安装环境为 VS2019 Qt5.12.12&#xff08;msvc2017_64、以及源码&#xff09; 我的安装地址&#xff1a;D:\Qt\Qt5.12.12 Mysql 8.1.0 默认安…

【C++从0到王者】第四十五站:图

文章目录 一、图的概念1.图概念2.顶点与边的概念3.有向图和无向图4.完全图5.邻接顶点6.顶点的度7.路径与路径长度8.简单路径与回路9.子图10.连通图与强连通图11.生成树 二、图的存储结构1.邻接矩阵1.1 基本概念1.2 代码实现 2.邻接表1.1 基本概念1.2 代码实现 3.总结 一、图的概…

如何设计一个秒杀系统?

秒杀是电商系统中常见的业务&#xff0c;用于吸引用户&#xff0c;刺激留存及消费所做的一种活动。经典的秒杀包含限时秒杀和限量秒杀。很多公司有专门的秒杀系统。哪个业务要做活动&#xff0c;就来对接这个系统。 系统特点 1、瞬时流量极大&#xff0c;过了秒杀时间点流量结束…

【HTML】HTML基础2(一些常用标签)

目录 例子 首先是网页图标 然后是一些常用标签 插入图片 例子 <!DOCTYPE html> <html><head><link rel"icon" href"img/银河护卫队-星爵.png" type"image/x-icon"><meta charset"utf-8"><title>…

[RoarCTF 2019]Easy Calc

这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST参数绕过&#xff09;&#xff08;含例题 buuctf easycalc&#xff09;_参数解析 绕过-CSDN博客 ascii码查询表&#xff1a;ASCII 表 | 菜鸟工具 …

人工智能_大模型010_Centos7.9中CPU安装ChatGLM3-6B大模型_安装使用_010---人工智能工作笔记0145

从一个空的虚拟机开始安装: https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files 可以看到这里有很多的数据文件,那么这里 这里点击模型文件就可以下载,这个就是chatglm3-6B的文件,需要点击每个文件,然后点击右边的下载,把文件都下载下来 右侧有下载按钮.点击下载可…

如何使用固定公网地址远程访问本地RStudio Server【内网穿透】

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

操作系统系列学习——系统调用的实现

文章目录 前言系统调用的实现 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工…

(C语言)二分查找

在⼀个升序的数组中查找指定的数字n&#xff0c;很容易想到的⽅法就是遍历数组&#xff0c;但是这种⽅法效率⽐较低。⽐如我买了⼀双鞋&#xff0c;你好奇问我多少钱&#xff0c;我说不超过300元。你还是好奇&#xff0c;你想知道到底多少&#xff0c;我就让你猜&#xff0c;你…

定时任务调动框架Quartz+SpringBoot集成

Quartz 是一个基于 Java 的广泛使用的开源的任务调度框架 官网&#xff1a; http://www.quartz-scheduler.org/ 源码&#xff1a; https://github.com/quartz-scheduler/quartz 整个 Quartz 的代码流程基本基本如下&#xff1a; 1、首先需要创建我们的任务(Job)&#xff0c…

【精品】集合list去重

示例一&#xff1a;对于简单类型&#xff0c;比如String public static void main(String[] args) {List<String> list new ArrayList< >();list.add("aaa");list.add("bbb");list.add("bbb");list.add("ccc");list.add(…

Python进阶学习:Pandas--向DataFrame中指定位置添加一列或多列

Python进阶学习&#xff1a;Pandas–向DataFrame中指定位置添加一列或多列 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f44…

基础!!!吴恩达deeplearning.ai:卷积层

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止&#xff0c;你使用的所有神经网络层都是密集层类型&#xff0c;这…