【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

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map