【QT】利用QT写一个鼠标事件的例子 鼠标拖动方格子 以及坐标转换

2023-10-13 15:58

本文主要是介绍【QT】利用QT写一个鼠标事件的例子 鼠标拖动方格子 以及坐标转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用QT写一个鼠标事件的例子  鼠标拖动方格子 以及坐标转换

新建一个带ui的项目

1.ui界面

2.添加头文件

#include <QDialog>
#include <QMouseEvent>

3.添加函数及变量声明

private:void mousePressEvent(QMouseEvent *);void mouseReleaseEvent(QMouseEvent *);void mouseMoveEvent(QMouseEvent *);
private:Ui::MouseDialog *ui;bool m_bDrag;//判断是否是左键选中QPoint m_ptPos;//记录鼠标和label相对位置

4.添加.cpp函数

MouseDialog::MouseDialog(QWidget *parent) :QDialog(parent),ui(new Ui::MouseDialog)
{ui->setupUi(this);
}MouseDialog::~MouseDialog()
{delete ui;
}void MouseDialog::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){//获取label矩形区域QRect rcBlock = ui->label->frameRect();//平移,让rcBlck和窗口坐标系一致rcBlock.translate(ui->label->pos());//判断鼠标点击的坐标是否在label区域内if(rcBlock.contains(event->pos()) == true){m_bDrag = true;//计算相对偏移量m_ptPos = ui->label->pos()-event->pos();}}
}
void MouseDialog::mouseReleaseEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){m_bDrag = false;}
}
void MouseDialog::mouseMoveEvent(QMouseEvent *event){if(m_bDrag){//计算新坐标QPoint ptPos = event->pos() + m_ptPos;//获取窗口大小QSize szClient = size();//获取label位置QRect rcBlock = ui->label->frameRect();//x坐标范围(0--(窗口x-label宽度))if(ptPos.x() < 0)ptPos.setX(0);else if(ptPos.x() >szClient.width()-rcBlock.width()){ptPos.setX(szClient.width()-rcBlock.width());}//y坐标范围(0--(窗口y-label高度))if(ptPos.y() < 0)ptPos.setY(0);else if(ptPos.y() >szClient.height()-rcBlock.height()){ptPos.setY(szClient.height()-rcBlock.height());}//移动到新的位置ui->label->move(ptPos);}
}

5.运行

这篇关于【QT】利用QT写一个鼠标事件的例子 鼠标拖动方格子 以及坐标转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204309

相关文章

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g