【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 QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或