Qt 基础组件速学 鼠标和键盘事件

学习目标: 鼠标事件和键盘事件应用

前置环境

运行环境:qt creator 4.12

学习内容和效果演示:

1.鼠标事件

根据鼠标的坐标位置,做出对应的事件。

2.键盘事件

根据键盘的输入做出对应操作

详细主要代码

1.鼠标事件

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{status = new QLabel("鼠标在当前窗口坐标为:");status->setFixedWidth(200);mouser = new QLabel("");mouser->setFixedWidth(200);statusBar()->addPermanentWidget(status);statusBar()->addPermanentWidget(mouser);this->setMouseTracking(true);resize(800,600);QImage *image=new QImage();if(!image->load("C:/Users/jbj/Pictures/test/IMG_5037.JPG")){QMessageBox::information(this,"失败","加载图片失败,请重新检查?");delete  image;return;}QLabel* imglabe = new QLabel(this);imglabe->setFixedSize(200,300);imglabe->setPixmap(QPixmap::fromImage(*image));
}MainWindow::~MainWindow()
{
}//鼠标移动时被调用
void MainWindow::mouseMoveEvent(QMouseEvent *e){mouser->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}
//鼠标按下时被调用
void MainWindow::mousePressEvent(QMouseEvent *e){QString qstr="("+QString::number(e->x())+","+QString::number(e->y())+")";if(e->button()==Qt::LeftButton){statusBar()->showMessage("用户已按下鼠标[左键]坐标"+qstr);}else if(e->button()==Qt::RightButton){statusBar()->showMessage("用户已按下鼠标[右键]坐标"+qstr);}else if(e->button()==Qt::MidButton){statusBar()->showMessage("用户已按下鼠标[中键]坐标"+qstr);}
}
//鼠标释放时被调用
void MainWindow::mouseReleaseEvent(QMouseEvent *e){QString qstr="("+QString::number(e->x())+","+QString::number(e->y())+")";statusBar()->showMessage("用户已释放鼠标坐标"+qstr,20);
}

 2.键盘事件

这里用到了绘画的知识点

画板 Qpalette    画家 Qpainter  钢笔QPen

理解:画师在画板上做画,会用到钢笔,当要展现时,QPainter 负责将画板呈现。

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{setWindowTitle("键盘测试");setAutoFillBackground(true);//调色板QPalette pale =this->palette();pale.setColor(QPalette::Window,Qt::white);setPalette(pale);setMinimumSize(800,600);setMaximumSize(800,600);width=size().width();height=size().height();pix=new QPixmap(width,height);//画板pix->fill(Qt::white);//实际物体main=new QPixmap(28,28);main->fill(Qt::red);sx=30;sy=30;step=30;Drawpinit();resize(800,600);
}
void Widget::Drawpinit(){pix->fill(Qt::white); // 清空QPainter* painter =new QPainter;//画家QPen pen(Qt::DashDotLine);for (int i=step; i<width;i+=step) { //竖线painter->begin(pix); //选择画板painter->setPen(pen);painter->drawLine(QPoint(i,0),QPoint(i,height));painter->end();}for(int j=step;j<height;j=j+step) // 横线{painter->begin(pix);     //选择画板painter->setPen(pen);painter->drawLine(QPoint(0,j),QPoint(width,j));painter->end();}painter->begin(pix);painter->drawPixmap(QPoint(sx,sy),*main);painter->end();
}void Widget::paintEvent(QPaintEvent *){QPainter painter;painter.begin(this);//将之前在 Drawpinit() 函数中绘制的 QPixmap 对象绘制到 Widget 的左上角(坐标 (0, 0))。painter.drawPixmap(QPoint(0,0),*pix);painter.end();}
void Widget::keyPressEvent(QKeyEvent *evt){sx=sx-sx%step;sy=sy-sy%step;//左右移动if(evt->key()==Qt::Key_Left){sx=(sx-step<0)?sx:sx-step;}if(evt->key()==Qt::Key_Right){sx=(sx+step+main->width() > width)?sx:sx+step;}if(evt->key()==Qt::Key_Up){sy=(sy-step<0)?sy:sy-step;}if(evt->key()==Qt::Key_Down){sy=(sy+step+main->height() >height)?sy:sy+step;}Drawpinit(); //重新设置参数update();   //触发绘画
}
Widget::~Widget()
{}

总结:

键盘事件:

        void keyPressEvent(QKeyEvent *evt) //按下时被调用

鼠标事件:

           //鼠标移动时被调用
            void mouseMoveEvent(QMouseEvent *e);
            //鼠标按下时被调用
            void mousePressEvent(QMouseEvent *e);
            //鼠标释放时被调用
            void mouseReleaseEvent(QMouseEvent *e);

详细开发则需查阅官方开发文档。

最后附上源代码链接
对您有帮助的话,帮忙点个star

26-mouserEvent · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

27-QkeyEvent · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

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

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

相关文章

一文读懂轻量日志收集系统Loki工作原理

Loki 是由 Grafana Labs 开发的日志聚合系统&#xff0c;设计目标是提供一种高效、低成本的日志收集和查询解决方案。与传统的日志系统&#xff08;如 ELK Stack&#xff09;不同&#xff0c;Loki 不会对日志内容进行索引&#xff0c;而是仅对日志的元数据进行索引&#xff0c;…

FTP、http 、tcp

HTTP VS FTP HTTP &#xff1a;HyperText Transfer Protocol 超文本传输协议&#xff0c;是基于TCP协议 FTP&#xff1a; File Transfer Protocol 文件传输协议&#xff0c; 基于TCP协议&#xff0c; 基于UDP协议的FTP 叫做 TFTP HTTP 协议 通过一个SOCKET连接传输依次会话数…

FIND_IN_SET使用案例--[sql语句根据多ids筛选出对应数据]

一 FIND_IN_SET select id,system_ids from intellect_client_info where FIND_IN_SET(5, system_ids) > 0;

Spring Boot 中的监视器是什么?有什么作用?

前言&#xff1a; 监听器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是监视器又是什么&#xff1f;估计很多人一脸懵的状态&#xff0c;本篇分享一下 Spring Boot 的监视器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践&#xff0c;通过本文希望大家能更深入地了解AWS智能湖仓架构&#xff0c;以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先&#xff0c;我们来看一下AWS经典的智能湖仓架构图…

高考选专业,兴趣与就业前景该如何平衡?

从高考结束的那一刻开始&#xff0c;有些家长和学生就已经变得焦虑了&#xff0c;因为他们不知道成绩出来的时候学生应该如何填报志愿&#xff0c;也不知道选择什么样的专业&#xff0c;毕竟大学里面的专业丰富多彩&#xff0c;如何选择确实是一门学问&#xff0c;而对于学生们…

乐清网站建设规划书

乐清是位于浙江省温州市的一个县级市&#xff0c;拥有悠久的历史和丰富的文化底蕴。随着互联网的快速发展&#xff0c;网站建设成为推动乐清经济和文化发展的重要手段。因此&#xff0c;我们认为有必要制定一个全面的乐清网站建设规划书&#xff0c;以促进乐清的经济繁荣和文化…

东芝 TB5128FTG 强大性能的步进电机驱动器

TB5128FTG它以高精度和高效能为设计理念&#xff0c;采用 PWM 斩波方法&#xff0c;并内置时钟解码器。通过先进的 BiCD 工艺制造&#xff0c;这款驱动器提供高达 50V 和 5.0A 的输出额定值&#xff0c;成为广泛应用场景中的强劲解决方案。 主要特性 TB5128FTG 拥有众多确保高…

SAP PS学习笔记01 - PS概述,创建Project和WBS

本章开始学习PS&#xff08;Project System&#xff09;。 1&#xff0c;PS的概述 PS&#xff08;Project System&#xff09;是SAP企业资源规划系统中的一个关键模块&#xff0c;主要用于项目管理。 它提供了一个全面的框架来规划、控制和执行项目&#xff0c;涵盖了从项目启…

竞赛选题 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

C++内存的一些知识点

一、内存分区 在C中&#xff0c;内存主要分为以下几个区域&#xff1a; 代码区&#xff1a;存放函数体的二进制代码。 全局/静态存储区&#xff1a;存放全局变量和静态变量&#xff0c;这些变量在程序的整个运行期间都存在。常量存储区&#xff1a;存放常量&#xff0c;这些值…

WPF UI 界面布局 魔术棒 文字笔记识别 技能提升 布局功能扩展与自定义 继承Panel的对象,测量与排列 系列七

应用开发第一步 功能分类&#xff1a;页面上的功能区域划分。。。。需求分析 业务逻辑 数据流 功能模块 UI/UX 编码 测试 发布 功能开发与布局 不用显式的方式设定元素的尺寸 不使用屏幕坐标来指定位置 Grid 功能最强大&#xff0c;布局最灵活的容器…

开发个人Go-ChatGPT--5 模型管理 (一)

开发个人Go-ChatGP–5 模型管理 (一) 背景 开发一个chatGPT的网站&#xff0c;后端服务如何实现与大模型的对话&#xff1f;是整个项目中开发困难较大的点。 如何实现上图的聊天对话功能&#xff1f;在开发后端的时候&#xff0c;如何实现stream的响应呢&#xff1f;本文就…

Vue-Router4.0 报“Cannot read property ‘forEach‘ of undefined”

Vue-Router4.0在创建路由时 报“Cannot read property ‘forEach‘ of undefined” 解决办法 将路由规则名称更改为routes&#xff0c;否则报错 import { createWebHashHistory, createRouter } from vue-router; // 创建路由规定 const routes [{path: /login,name: login,co…

【Unity数据交互】Unity中使用二进制进行数据持久化

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 专栏交流&#x1f9e7;&…

PostgreSQL 技术内幕(十七):FDW 实现原理与源码解析

对于一定规模的系统而言&#xff0c;数据仓库往往需要访问外部数据来完成分析和计算。外部数据包装器&#xff08;Foreign Data Wrapper&#xff0c; 简称 FDW&#xff09;是 PostgreSQL 提供的访问外部数据源机制。用户可以使用简单的 SQL 语句访问和操作外部数据源&#xff0…

[word] Word如何快速生成一段文本 #知识分享#学习方法

Word如何快速生成一段文本 Word如何快速生成一段文本&#xff1f;有时候我们会用一大段文字来做一些功能测试&#xff0c;不少朋友的做法就是脸滚键盘&#xff0c;一顿乱按&#xff0c;这样看起来文笔不通&#xff0c;看着也会比较难受&#xff0c;测试功能的效果也不怎么理想…

uniapp中实现跳转链接到游览器(安卓-h5)

uniapp中实现跳转链接到游览器&#xff08;安卓-h5&#xff09; 项目中需要做到跳转到外部链接&#xff0c;网上找了很多都不是很符合自己的要求&#xff0c;需要编译成app后是跳转到游览器打开链接&#xff0c;编译成web是在新窗口打开链接。实现的代码如下&#xff1a; 效果&…

java基于ssm+vue 旅游信息资源平台

1前台首页功能模块 旅游资源网站 &#xff0c;在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等内容&#xff0c;如图1所示。 图1系统功能界面图 用户登录、用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名…

DFS之剪枝与优化——AcWing 165. 小猫爬山

DFS之剪枝与优化 定义 DFS之剪枝与优化指的是在执行深度优先搜索(DFS, Depth-First Search)时&#xff0c;采取的一系列策略来减少搜索空间&#xff0c;避免无效计算&#xff0c;从而加速找到问题的解。剪枝是指在搜索过程中&#xff0c;当遇到某些条件不符合解的要求或者可以…