Qt实现鼠标拖动窗口

Qt实现鼠标拖动窗口

  • 1、设置窗口无边框
  • 2、重写鼠标点击,移动函数
    • 2.1添加头文件
    • 2.2 重写函数
    • 2.3 添加定义
  • 3、定义一个偏移值
  • 4、判断鼠标左键是否按下并计算偏移值
  • 5、移动窗口
  • 6、.h文件和.cpp文件
    • 6.1 .h文件
    • 6.2 .cpp文件
  • 7、总结

1、设置窗口无边框

this->setWindowFlag(Qt::FramelessWindowHint);        //设置窗口无边框

2、重写鼠标点击,移动函数

2.1添加头文件

在这里插入图片描述

2.2 重写函数

在这里插入图片描述

2.3 添加定义

//鼠标移动事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{}

3、定义一个偏移值

在这里插入图片描述

4、判断鼠标左键是否按下并计算偏移值

//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{//判断右键是否按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());           //当前鼠标位置显示菜单}//判断左键是否按下if(event->button() == Qt::LeftButton){}
}

5、移动窗口

//鼠标移动事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);       //移动窗口
}

6、.h文件和.cpp文件

6.1 .h文件

#ifndef WEARHERMAININTERFACE_H
#define WEARHERMAININTERFACE_H#include <QWidget>
#include <QMouseEvent>
#include <QMenu>
#include <QAction>
#include <QMessageBox>namespace Ui {
class wearherMainInterface;
}class wearherMainInterface : public QWidget
{Q_OBJECTpublic:explicit wearherMainInterface(QWidget *parent = nullptr);~wearherMainInterface();protected:void mousePressEvent(QMouseEvent *event) override;          //重写鼠标点击事件void mouseMoveEvent(QMouseEvent *event) override;           //重写鼠标移动事件private slots:void on_quitPushButton_clicked();               //退出按钮void quitMenuTriggered();                       //菜单被触发后处理槽函数private:Ui::wearherMainInterface *ui;QMenu *quitMenu;            //创建退出菜单指针QPoint moffset;             //鼠标与窗口左上角的偏移值};#endif // WEARHERMAININTERFACE_H

6.2 .cpp文件

#include "wearhermaininterface.h"
#include "ui_wearhermaininterface.h"wearherMainInterface::wearherMainInterface(QWidget *parent) :QWidget(parent),ui(new Ui::wearherMainInterface)
{ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);           //去边框
//    this->setAttribute(Qt::WA_TranslucentBackground);       //半透明背景quitMenu = new QMenu(this);     //创建菜单对象QAction *quitAction = new QAction(QIcon(":/widdgetMainInterface/exit.png"),"退出",this);quitMenu->addAction(quitAction);             //菜单添加动作对象//连接菜单被触发的信号与槽connect(quitMenu,&QMenu::triggered,this,&wearherMainInterface::quitMenuTriggered);}wearherMainInterface::~wearherMainInterface()
{delete ui;
}//鼠标点击事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{//判断右键是否按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());           //当前鼠标位置显示菜单}//判断左键是否按下//当前鼠标位置        event->globalPos()//当前窗口位置        this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();  //当前鼠标位置减去当前窗口位置得到偏移值}
}//鼠标移动事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);       //移动窗口
}//退出按钮
void wearherMainInterface::on_quitPushButton_clicked()
{QMessageBox quitMes;                        //创建退出弹窗对象quitMes.setWindowTitle("关闭界面");          //弹窗标题quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //设置窗口图标quitMes.setIcon(QMessageBox::Warning);      //弹窗图片quitMes.setText("是否关闭弹窗");              //弹窗文本quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //设置Ok和Cancle两个按钮quitMes.setButtonText(QMessageBox::Ok, "确认");           //Ok改为确认quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改为取消int result = quitMes.exec();       //显示信息框等待用户交互//如果用户选择了Okif(result == QMessageBox::Ok){this->close();          //关闭主界面}else    //用户取消什么都不做{}
}//菜单被触发后槽函数
void wearherMainInterface::quitMenuTriggered()
{QMessageBox quitMes;                        //创建退出弹窗对象quitMes.setWindowTitle("关闭界面");          //弹窗标题quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //设置窗口图标quitMes.setIcon(QMessageBox::Warning);      //弹窗图片quitMes.setText("是否关闭弹窗");              //弹窗文本quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //设置Ok和Cancle两个按钮quitMes.setButtonText(QMessageBox::Ok, "确认");           //Ok改为确认quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改为取消int result = quitMes.exec();       //显示信息框等待用户交互//如果用户选择了Okif(result == QMessageBox::Ok){this->close();          //关闭界面}else    //用户取消什么都不做{}
}

7、总结

以上就是Qt实现鼠标拖动窗口的整个过程了,浏览过程中,如若发现错误,欢迎大家指

正,有问题的可以评论区留言或者私信。.h文件和.cpp文件中还有一些别的功能,大家

可以选择性参考 最后,如果大家觉得有所帮助的话,可以点个赞,谢谢大家!梦虽遥,

追则能达;愿虽艰,持则可圆!

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

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

相关文章

MDX语言的数论算法

MDX语言的数论算法探讨 引言 数论作为数学的一个重要分支&#xff0c;主要研究整数及其性质。在计算机科学和信息技术领域&#xff0c;数论算法被广泛应用于密码学、算法设计、数据加密等领域。MDX&#xff08;Multi-Dimensional Expressions&#xff09;语言&#xff0c;虽然…

【学Rust写CAD】34 精确 Alpha 混合函数(argb.rs补充方法)

源码 #[inline]pub fn over_exact(self, dst: Argb) -> Argb {let a 255 - self.alpha32();let t dst.rb() * a 0x80_00_80;let mut rb (t ((t >> 8) & Argb::MASK)) >> 8;rb & Argb::MASK;rb self.rb();// saturaterb | 0x1000100 - ((rb >&…

2025-04-06 NO.2 Quest3 基础配置与打包

文章目录 1 场景配置1.1 开启手势支持1.2 创建 OVRCameraRig1.3 创建可交互 Cube 2 打包配置 环境&#xff1a; Windows 11Unity6000.0.42f1 Quest3 开发环境配置见 2025-03-17 NO.1 Quest3 开发环境配置教程_quest3 unity 开发流程-CSDN博客。 1 场景配置 1.1 开启手势支持 …

LabVIEW提升程序响应速度

LabVIEW 程序在不同计算机上的响应速度可能存在较大差异&#xff0c;这通常由两方面因素决定&#xff1a;计算机硬件性能和程序本身的优化程度。本文将分别从硬件配置对程序运行的影响以及代码优化方法进行详细分析&#xff0c;帮助提升 LabVIEW 程序的执行效率。 一、计算机硬…

Matlab:三维绘图

目录 1.三维曲线绘图命令&#xff1a;plot3 实例——绘制空间直线 实例——绘制三角曲线 2.三维曲线绘图命令&#xff1a;explot3 3.三维网格命令&#xff1a;mesh 实例——绘制网格面 实例——绘制山峰曲面 实例——绘制函数曲线 1.三维曲线绘图命令&#xff1a;plot3 …

微信小程序基于Canvas实现头像图片裁剪(上)

序言 嘿&#xff0c;打工人混迹职场这么久&#xff0c;图片处理肯定都没少碰。不过咱说实话&#xff0c;大部分时候都是直接 “抄近道”&#xff0c;用现成的三方组件&#x1f60f;。就像我&#xff0c;主打一个会用工具&#xff0c;毕竟善用工具可是咱人类的 “超能力”&…

[特殊字符] 使用 Handsontable 构建一个支持 Excel 公式计算的动态表格

在 Web 应用中&#xff0c;处理表格数据并提供 Excel 级的功能&#xff08;如公式计算、数据导入导出&#xff09;一直是个挑战。今天&#xff0c;我将带你使用 React Handsontable 搭建一个强大的 Excel 风格表格&#xff0c;支持 公式计算、Excel 文件导入导出&#xff0c;并…

0302useState-hooks-react-仿低代码平台项目

文章目录 1 useState1.1 说明返回 1.2 示例1.3 数据类型 2 state2.1 概述2.2 state特点 3 state重构问卷4 immer结语 1 useState useState 是一个 React Hook&#xff0c;它允许你向组件添加一个 状态变量。 1.1 说明 语法 const [state, setState] useState(initialState…

前端实现单点登录(SSO)的方案

概念&#xff1a;单点登录&#xff08;Single Sign-On, SSO&#xff09;主要是在多个系统、多个浏览器或多个标签页之间共享登录状态&#xff0c;保证用户只需登录一次&#xff0c;就能访问多个关联应用&#xff0c;而不需要重复登录。 &#x1f4a1; 方案分类 1. 前端级别 SS…

zabbix监控网站(nginx、redis、mysql)

目录 前提准备&#xff1a; zabbix-server主机配置&#xff1a; 1. 安装数据库 nginx主机配置&#xff1a; 1. 安装nginx redis主机配置&#xff1a; 1. 安装redis mysql主机配置&#xff1a; 1. 安装数据库 zabbix-server&#xff1a; 1. 安装zabbix 2. 编辑配置文…

无人机等非合作目标公开数据集2025.4.3

一.无人机遥感数据概述 1.1 定义与特点 在遥感技术的不断发展中&#xff0c;无人机遥感数据作为一种新兴的数据源&#xff0c;正逐渐崭露头角。它是通过无人驾驶飞行器&#xff08;UAV&#xff09;搭载各种传感器获取的地理空间信息&#xff0c;具有 覆盖范围大、综合精度高、…

大数据时代的隐私保护:区块链技术的创新应用

一、引言 在当今数字化时代&#xff0c;大数据已经成为推动社会发展的关键力量。从商业决策到社会治理&#xff0c;从医疗健康到金融服务&#xff0c;数据的价值日益凸显。然而&#xff0c;随着数据的大量收集和广泛使用&#xff0c;隐私保护问题也日益突出。如何在充分利用大…

LeetCode 2442:统计反转后的不同整数数量

目录 核心思想&#xff1a;数字的“拆分”与“重组” 分步拆解&#xff08;以输入 123 为例&#xff09; 关键操作详解 为什么能处理中间或末尾的0&#xff1f; 数学本质 总结 题目描述 解题思路 代码实现 代码解析 复杂度分析 示例演示 总结 核心思想&#xff1a;…

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…

Flutter项目之登录注册功能实现

目录&#xff1a; 1、页面效果2、登录两种状态界面3、中间按钮部分4、广告区域5、最新资讯6、登录注册页联调6.1、网络请求工具类6.2、注册页联调6.3、登录问题分析6.4、本地缓存6.5、共享token6.6、登录页联调6.7、退出登录 1、页面效果 import package:flutter/material.dart…

木马学习记录

一句话木马是什么 一句话木马就是仅需要一行代码的木马&#xff0c;很简短且简单&#xff0c;木马的函数将会执行我们发送的命令 如何发送命令&#xff06;发送的命令如何执行? 有三种方式&#xff1a;GET&#xff0c;POST&#xff0c;COOKIE&#xff0c;一句话木马中用$_G…

(C语言)单链表(1.0)(单链表教程)(数据结构,指针)

目录 1. 什么是单链表&#xff1f; 2. 单链表的代码表示 3. 单链表的基本操作 3.1 初始化链表 3.2 插入结点&#xff08;头插法&#xff09; 3.3 插入结点&#xff08;尾插法&#xff09; 3.4 遍历链表 4. 单链表的优缺点 代码&#xff1a;*L(LinkList)malloc(sizeof(…

Sentinel-自定义资源实现流控和异常处理

目录 使用SphU的API实现自定义资源 BlockException 使用SentinelResource注解定义资源 SentinelResourceAspect 使用Sentinel实现限流降级等效果通常需要先把需要保护的资源定义好&#xff0c;之后再基于定义好的资源为其配置限流降级等规则。 Sentinel对于主流框架&#…

Linux信号处理解析:从入门到实战

Linux信号处理全解析&#xff1a;从入门到实战 一、初识Linux信号&#xff1a;系统级的"紧急电话" 信号是什么&#xff1f; 信号是Linux系统中进程间通信的"紧急通知"&#xff0c;如同现实中的交通信号灯。当用户按下CtrlC&#xff08;产生SIGINT信号&…

Java的Selenium的特殊元素操作与定位之select下拉框

如果页面元素是一个下拉框&#xff0c;我们可以将此web元素封装为Select对象 Select selectnew Select(WebElement element); Select对象常用api select.getOptions();//获取所有选项select.selectBylndex(index);//根据索引选中对应的元素select.selectByValue(value);//选…