qt实现窗口拖动的两种思路

提要

窗口按下鼠标不放拖动窗口移动,鼠标释放的时候,停止拖动。这个过程可以用两种方法来实现。
1.鼠标点击后,获取鼠标按下点的坐标和起初窗口左上角的坐标,用鼠标按下点的坐标减去鼠标左上角的坐标,求出这个固定值。鼠标移动时,获取鼠标的位置减去之前鼠标开始按下点与左上角的距离,得到窗口移动后左上角的坐标,使用move函数使窗口移动到当前位置。
2.鼠标点击后,获取鼠标按下点的坐标和起初窗口左上角的坐标,鼠标移动后,获取鼠标的位置减去鼠标刚开始按下的位置,求出移动的距离,用窗口左上角的坐标加上鼠标移动的距离。得到窗口移动后左上角的坐标,使用move函数使窗口移动到当前位置。

实现

先附上第一种实现的代码:

//参数类型说明,不涉及定义
QPoint              m_offPos;//鼠标点击点与窗口左上角之间的距离void ResolutionDialog::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {QPoint startPos = event->globalPos();m_offPos = startPos - geometry().topLeft();}QDialog::mousePressEvent(event);
}void ResolutionDialog::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() == Qt::LeftButton) {QPoint endPos = event->globalPos();move(endPos - m_offPos);}QDialog::mouseMoveEvent(event);
}void ResolutionDialog::mouseReleaseEvent(QMouseEvent *event)
{QDialog::mouseReleaseEvent(event);
}

下面附上第二种窗口移动的实现代码:

void ResolutionDialog::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){m_beginPos = event->globalPos();m_leftTopPos = pos();//也可以使用geometry().topLeft()}QDialog::mousePressEvent(event);
}void ResolutionDialog::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons() == Qt::LeftButton){QPoint endPos = event->globalPos();QPoint offPos = endPos - m_beginPos;QPoint pos = m_leftTopPos + offPos;move(pos);}QDialog::mouseMoveEvent(event);
}void ResolutionDialog::mouseReleaseEvent(QMouseEvent *event)
{QDialog::mouseReleaseEvent(event);
}

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

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

相关文章

Linux怎么取消ftp的匿名访问功能

编辑vsftpd.conf: vim /etc/vsftpd/vsftpd.conf修改anonymous_enableYES 为 NO 保存退出 重起服务生效: /etc/init.d/vsftpd restart

看华为生态大学 如何玩转人才生态?

戳蓝字“CSDN云计算”关注我们哦!极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!从孔子兴私学开始,千百年来,中国人在私塾中开始或完成自…

银河麒麟通过命令行安装软件没有安装上

提要 安装软件时出现: nigulasinigulasi-virtual-machine:~$ dpkg -L fcitx-frontend-qt5 | grep .so dpkg-query: 软件包 fcitx-frontend-qt5 没有被安装 使用 dpkg --info ( dpkg-deb --info) 来检测打包好的文件, 还可以通过 dpkg --contents ( dpk…

Hadoop精华问答 | 关于Hadoop核心技术的精华问答

戳蓝字“CSDN云计算”关注我们哦!随着科技时代的发展,大数据与云计算已势不可挡的架势席卷未来,不可否认,大数据时代已经来临,并将深刻地改变着我们的工作和生活。学习大数据技术,是时代的召唤,…

如何将本地代码推送至远程仓库

文章目录一、现在远程仓库创建仓库二、本地操作流程1. 用idea打开项目2. 选择需要打开项目3. 选择这个窗口打开或者用一个新的窗口打开都可以4. 导入成功的项目结构三、将本地仓库的代码推送远程仓库1. 初始化本地git仓库2. 将项目代码提交到暂存区3. 将暂存区的代码提交到本地…

qt不规则按钮样式在自适应分辨率时应该注意的图片缩放模式

提要 qt设置不规则按钮的样式,并要求不规则按钮能够适应不同的分辨率,分为同比例的分辨率,如16:9,也可以为不同比例的的分辨率,如之前为16:9,同时适应16:5的分辨率。在设…

Open Infrastructure Summit 2019,炼就成功开源范示;阿里云居亚太市场第一;高通将获45亿美元和解金...

戳蓝字“CSDN云计算”关注我们哦!重磅先知 Open Infrastructure Summit 2019,炼就成功开源范示云计算市场烽烟再起:阿里云位居亚太市场第一高通将从苹果公司获得至少45亿美元和解金重磅快报Open Infrastructure Summit 2019,炼就成功开源范示“开源不是…

MySQL 输入任何语句都提示You must reset your password using ALTER USER 解决方法

Win10上安装并配置完成MySQL-5.7.22,修改第一次密码并登陆后,不论输入什么语句,都出现提示“You must reset your password using ALTER USER…”的提示错误语句,解决办法如下: SET PASSWORD PASSWORD(‘新密码’); …

qt自定义按钮类,每个按钮自带一个右键弹出框,如何使同一时刻只显示一个弹出框

提要 继承于QPushButton的自定义按钮类,其右键弹出一个弹框,创建多个这样的自定义按钮在窗口中,每一时刻只显示一个右键弹出框,避免同一时刻,多个按钮右键弹出弹出框后,未及时关闭弹出框导致的同一时刻有多…

navicat and connection is being used

1、在已经保存的连接上上编辑,测试连接成功,但是点击连接就会一直提示 connection is being used 2、需要新建一个连接,才能使用,不能再已保存的上面修改

以人为本、用“简”驭“繁”……统统都是新华三物联网的关键词儿!

戳蓝字“CSDN云计算”关注我们哦!极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!初见2019 Navigate领航者峰会的展区,就被这个接地气的大屏幕吸引了…

我们应聘BAT等互联网公司,关于Spring到底需要掌握什么?

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!阅读本文大概需要 3 分钟。之前分享过一些BAT面试必会的文章,一些读者看了…

java.lang.reflect.InvocationTargetException 的惨痛教训

记录发布webservice漏发内部类文件导致异常java.lang.reflect.InvocationTargetException 的惨痛教训 我的一个实现类中调用了一个内部类,在本地测试正常,发布服务期之后,soapUI共测试报 java.lang.reflect.InvocationTargetException &…

qt下实现文件的拖拽打开

引言 此文用于记录按下鼠标左键不放,拖动文件到程序中打开。该示例中只设置了可以拖动的文件类型为.h,.cpp,.txt这三种文件类型。 程序运行的效果: 示例 下面是具体的实现。 项目的结构: 具体的实现代码,如下: mai…

Java并行流 No thread-bound request found

异常如下: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operati…

qt中使用QCompleter实现查找功能

引言 本文有两个例子,示例一中通过在combox中输入文本可以实现自动补全,用户根据提示列表,选中某一个信息,作为要搜索的字符串。示例二中用户输入要搜索的文本在行编辑器中,当输入的文本在搜索的字符串列表中时&#…

动图:程序员才懂的这些!

戳蓝字“CSDN云计算”关注我们哦!1. Java VS C2. 功能先上了再说3.高级开发人员作为一个团队进行编程4. 调试CSS5. 编译错误:括号不匹配6.高级开发人员重构代码7. 看实习生编码的时候,我的表情...8.当我尝试进入BIOS9. 虽然很多Bug&#xff0…

MyBatisPlus_查询篇_入门试炼_01

文章目录1、数据库 Schema 脚本如下:2、数据库 Data 脚本:3. 实战现有一张 User 表,其表结构如下:idnameageemail1Jone18test1gblfy.com2Jack20test2gblfy.com3Sandy28test3gblfy.com4Jone21test4gblfy.com5Billie24test5gblfy.co…

表达祝福与喜悦的数字资产——平安夜的特别礼物华为云DAC

平安夜的街灯光闪烁,人们沉浸在节日气氛中,忙着购买礼物,准备晚餐,相互传递感恩与祝愿。华为云DAC数字资产创意平台锁住美好,用数字艺术的形式制作专属节日记忆,有创意的礼物总让人难忘。 独一无二的礼物—…

qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

提要 此文分别就qt生成纯代码的动态库,含有ui文件的动态库以及含有资源文件qss文件和切图的动态库。 实现 1.纯代码的生成qt库。即没有ui文件的项目。 打开QtCreate,新建文件,选择library. 接下来填写项目的名称,选择生成的路…