Qt在指定区域内拖动窗口

将窗口中的小窗口按住拖动,使其在该窗口中移动。
效果图如下:
在这里插入图片描述
鼠标左键按住上图中的彩色窗口,就可以在窗口的客户区中来回拖动窗口。
项目的文件结构如下:
在这里插入图片描述
创建基于QWidget的应用程序,main.cpp的程序没有做任何的改变,主要的实现的代码如下:
dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();void getDragAreaRect();//获取窗口可拖动的区域大小,客户端的区域void getMousePressRect();//获取鼠标按下的窗口的区域widget
protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);
private:Ui::Dialog *ui;bool     m_isPress;//是否按下鼠标QPoint   m_startPos;//鼠标按下时的点QPoint   m_topleftPos;//被拖动窗口左上角的点QPoint   m_offsetPos;//窗口左上角于鼠标点击点的差值QRect    m_dragArea;//可进行拖动的区域QRect    m_pressArea;//被拖动的窗口的可点击区域
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QMouseEvent>
#include <QDebug>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog),m_isPress(false)
{ui->setupUi(this);getDragAreaRect();getMousePressRect();
}Dialog::~Dialog()
{delete ui;
}void Dialog::getDragAreaRect()
{m_dragArea = this->geometry();//客户区大小
}void Dialog::getMousePressRect()
{m_pressArea = ui->widget->rect();
}void Dialog::mousePressEvent(QMouseEvent *event)
{bool isContain = m_pressArea.contains(event->pos());
//    qDebug()<<"isContain:"<<isContain<<"m_pressArea:"<<m_pressArea;if(event->button() & Qt::MouseButton::LeftButton && isContain){
//        qDebug()<<"鼠标按下";m_isPress = true;m_startPos = event->pos();m_topleftPos = ui->widget->frameGeometry().topLeft();m_offsetPos = m_startPos - m_topleftPos;}QWidget::mousePressEvent(event);
}void Dialog::mouseMoveEvent(QMouseEvent *event)
{if(m_isPress && m_dragArea.contains(event->pos()))//鼠标按下的点在整个可拖动区域内拖动{QPoint currPos = event->pos();int x = currPos.x() - m_offsetPos.x();int y = currPos.y() - m_offsetPos.y();int borderWid = m_dragArea.width() - m_pressArea.width();int borderHei = m_dragArea.height() - m_pressArea.height();if(x < 0){x = 0;}if(y < 0){y = 0;}if(x > borderWid){x = borderWid;}if(y > borderHei){y = borderHei;}ui->widget->move(x,y);}QWidget::mouseMoveEvent(event);
}void Dialog::mouseReleaseEvent(QMouseEvent *event)
{m_isPress = false;//更新被移动的窗口的位置,保证被点击的点在窗口内m_pressArea.setLeft(ui->widget->geometry().x());m_pressArea.setTop(ui->widget->geometry().y());m_pressArea.setRight(m_pressArea.left() + ui->widget->width());m_pressArea.setBottom(m_pressArea.top() + ui->widget->height());
//    qDebug()<<"m_pressArea:"<<m_pressArea;QWidget::mouseReleaseEvent(event);
}

ui文件只是向其中拖入了一个widget,并设置了其样式,其它没有做改变。

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

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

相关文章

昨天,终于拿到了腾讯 offer

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者 | 程序员小吴本文来自程序员小吴的一个读者的投稿&#xff0c;我跟他是在 2 月份…

OpenGL 褐色

目录 一.OpenGL 褐色 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 褐色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >&…

企业实战(Jenkins+GitLab+SonarQube)_03_Jenkins登录

Jenkins怎样登录&#xff1f;接上一篇Jenkins运行 https://blog.csdn.net/weixin_40816738/article/details/90383686 文章目录1. Windows复制秘钥登录Jenkins2. Linux复制秘钥登录Jenkins1. Windows复制秘钥登录Jenkins 秘钥存放文件的位置(如上图所示)&#xff1a; C:\User…

OpenStack精华问答 | OpenStack 网络中 OpenFlow 规则的作用是什么?

被亲生父母抛弃,被众多大厂拒绝,OpenStack 却依旧坚挺。今天就让我们看看关于OpenStack 的精华问答。1Q&#xff1a;OpenStack 网络中 OpenFlow 规则的作用是什么&#xff1f;A&#xff1a; OpenFlow 规则是一种机制&#xff0c;这种机制定义了一个数据包如何从源到达目的地。O…

企业实战(Jenkins+GitLab+SonarQube)_02_Jenkins运行

Jenkins怎样运行&#xff1f; 文章目录一、Jenkins怎样在Windows运行&#xff1f;1. 找到下载的本地jenkins.war的目录&#xff0c;cmd进入命令行&#xff0c;执行&#xff1a;2. jenkins启动成功后&#xff0c;浏览器访问&#xff1a;localhost:8080二、Jenkins怎样在Linux运行…

Windows OpenGL ES 图像褐色

目录 一.OpenGL ES 图像褐色 1.原始图片2.效果演示 二.OpenGL ES 图像褐色源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

要闻君说:国内首个5G电话由中国移动在京被打通!360公司转让奇安信股权;腾讯宣布开源三大开发工具 ,紧追技术共享步伐;...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go OPPO技术开放日第三期&#…

qt编译器5.12.3怎么一次性删除所有的断点

自己尝试出来的一个可以一次性删除所有断点的方法&#xff0c;可能还有其它方法&#xff0c;知者望以告知。 方法&#xff1a; 在debug模式下&#xff0c;进行调试运行&#xff0c;此时会出现调试的箭头&#xff0c;方框之类的一栏&#xff0c;如下图&#xff0c;在横向紧挨着的…

Linux操作系统需要做的准备

Linux操作系统需要做的准备 1. 确定IP地址2. 确认登录用户名密码3. 查看/启动ssh服务4. 确认可以远程连接5. 确认防火墙处于关闭状态 1. 确定IP地址 ifconfig2. 确认登录用户名密码 账号&#xff1a;root 秘钥&#xff1a;1234563. 查看/启动ssh服务 检查ssh服务是否启动 …

Windows OpenGL 图像褐色

目录 一.OpenGL 图像褐色 1.原始图片2.效果演示 二.OpenGL 图像褐色源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习…

Qt线程写日志

之前没有考虑写日志时采用单独的线程&#xff0c;而是将写日志的部分放在了主线程中实现&#xff0c;后面发现当程序输出的日志信息过多&#xff0c;程序长时间运行后会造成主线程的运行性能降低。故尝试创建一个单独的线程用来写日志。 此程序有一个弊端&#xff0c;运行时没有…

京解之才——2019年技术盘点微服务篇(三)| 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核测评&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;过去几年来&#xff0c;“微服务架构”方兴未艾&#xff0c;尽管这种架构风格没有确切的定义…

Linux环境安装并配置Maven

一、Linux环境安装并配置Maven 1. 进入官网下载Tomat安装包2. 解压安装Tomcat3. 配置可执行权限4. 配置可执行端口&#xff08;避免端口冲突&#xff09;5. 验证Tomcat是否可以正常启动和停止 1. 进入Maven官网复制下载地址下载maven maven官网&#xff1a;http://maven.apach…

OpenGL 色阶

目录 一.OpenGL 色阶 1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 色阶 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 …

Qt中全局变量的使用

一般在项目中想要定义一个变量可以被多个类进行访问&#xff0c;此时就可以定义全局变量。习惯上会将项目中所有类都用到的变量&#xff0c;集中定义在一个头文件中&#xff0c;使用时只需包含此头文件。但是对于我这样基础不牢靠的人&#xff0c;就犯了一个错误&#xff0c;而…

强推!2019年最火的容器、K8S和DevOps入门都在这了

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; Pasca来源&#xff1a;蛋蛋团&#xff08;ID&#xff1a;dandan_tua…

Tomcat10 下载和配置 Linux 环境

文章目录1. 下载Tomat2. 复制链接地址3. 下载4. 解压Tomcat5. 赋予权限6. 启动tomcat7. 监控日志8. linux防火墙9. 浏览器验证1. 下载Tomat tomcat官网&#xff1a;https://tomcat.apache.org/download-10.cgi 2. 复制链接地址 3. 下载 wget https://downloads.apache.org/t…

Elastic全球用户大会Elastic{ON}首次落地北京

2019年4月10日&#xff0c;全球领先的大数据搜索软件公司Elastic&#xff08;Elasticsearch和Elastic Stack的开发公司&#xff09;一年一度的全球用户大会Elastic首次来到中国&#xff0c;在北京盛大开幕。来自全国的开发人员、合作伙伴和IT行业人士齐聚一堂&#xff0c;了解和…

Jenikns新建节点、配置节点、新建任务、配置任务、脚本验证

Jenkins节点概念&#xff1a; 1、Jenkins的节点就相当于一个服务器的环境配置容器 2、Jenkins的节点可以是多个的&#xff0c;一个UATEnv节点相当于一个UAT环境配置容器 3、Jenkins的节点就相当于把一个服务器的环境配置信息&#xff0c;都配置到了节点中&#xff0c;运行节点就…

Windows OpenGL ES 图像色阶

目录 一.OpenGL ES 图像色阶 1.原始图片2.效果演示 二.OpenGL ES 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…