Qt实现 可移动的无边框窗口

关于Qt的无边框窗口移动 唠叨 自己花时间分析了下无边框窗口移动过程(本人头脑比较笨),逐个过程解析后,发现思路越来越清晰,这边做下记录。文章比较啰嗦,因为是当做个人笔记。 基本移动 要做无边框窗口移动,首先是把窗口无边框化。 setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowStaysOnTopHint ); 接着是要重写你要移动的窗口的鼠标事件。要移动,当然要重写移动事件。 v 阅读详情

日常开发中,因为需要自定义标题栏来实现更好的效果,所以经常需要隐藏窗口自带的标题栏。

在Qt中,通过setWindowFlags(Qt::FramelessWindowHint)函数对当前窗口设置无边框,但是这样存在一个问题,

就是窗口无法被鼠标拖动了,所以这时候就需要重写一下事件,来实现窗口的移动。

先看代码实现:

#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setWindowFlags(Qt::FramelessWindowHint);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::mouseMoveEvent(QMouseEvent *e)
{
    QPoint y = e->globalPos();
    QPoint x= y - m_zPos;
    this->move(x);
}

void Widget::mousePressEvent(QMouseEvent *e)
{
    QPoint y = e->globalPos();
    QPoint x = this->geometry().topLeft();
    m_zPos = y-x;
}

void Widget::mouseReleaseEvent(QMouseEvent *e)
{
    m_zPos = QPoint();
}


void Widget::on_btn_clos_clicked()
{
    this->close();
}

void Widget::on_btn_max_clicked()
{
    if(this->isMaximized())
    {
        this->showNormal();
        return;
    }
    this->showMaximized();
}

void Widget::on_btn_min_clicked()
{
    this->showMinimized();
}

我们需要在头文件中重写以下3个鼠标事件,

//鼠标移动事件
void mouseMoveEvent(QMouseEvent *event);

//鼠标释放事件
void mouseReleaseEvent(QMouseEvent *event);

//鼠标按下事件
void mousePressEvent(QMouseEvent *event);

通过鼠标按下,进入mousePressEvent函数,获取到当前相对窗口的坐标,

当鼠标拖动时,在mouseMoveEvent会进行响应,然后通过调用move函数,来实现窗口的移动。

当拖动结束后,鼠标释放,不再按下,会进入mouseReleaseEvent,这时候将上次鼠标按下的坐标赋值置空。

Qt 无边框、透明、可移动、的个性窗体案例详解 很多朋友都问透明的效果怎么做,为什么自己做的无边框窗体不可移动,一个个回答的很累,干脆写出来分享下好了. int main(int argc, char *argv[]){ QApplication::setStyle("cleanlooks"); QApplication a(argc, argv); login w; w.setWindowTitle("Cl 阅读详情

相关推荐

qt实现漂亮主页面

因为我是在Designer上写的,所以不太好呈现。1.无边框+窗口可移动。主要工作都在这里完成。

weixin_51883798的博客 3267

qt实现无标题栏透明可移动窗口

QT的常规对话框包括标题栏、图标Icon、关闭按钮,如下图所示:   在有些场景中,我们可能需要对标准对话框进行美化工作,比如,去掉标题栏和边框,并使整体表现出透明色的样子,如下图所示:     通过查找Qt的帮助文档,我们可以发现Qt的可视化控件基类中有一个方法void setWindowFlags(type),可以通过此方法对QWidget及其子类的窗体进行不同的属性设置。更

kestiny的专栏 9559

Qt实现无边框可移动窗口

在Qt中,我们可以通过操作窗口的flags属性来实现窗口的无边框和可移动。实现这些步骤后,我们就可以得到一个可以自由移动的窗口。Qt实现无边框可移动窗口。

CodeVorter的博客 576

python qt5自定义无标题栏、窗口拖动、关闭、最小化

因开发界面需要,Qtdesigner设计的原始界面实在有点儿太传统了,有点不堪入目,哈哈哈哈哈,这里做一次记录。 一、窗口设计无标题栏,基础美化过程 下面这里是窗口设计界面 # coding:utf-8 from PyQt5 import QtCore,QtGui,QtWidgets import sys class MainUi(QtWidgets.QMainWindow): de...

云舒的博客 4983

实现Qt窗口无边框可移动

无边框窗口通常用于需要自定义窗口外观或需要全屏显示内容的应用程序中。例如,视频播放器、游戏和一些特殊的工具应用程序都可能采用无边框窗口设计。通过 Qt 框架,我们可以实现这样的窗口,并使其具备拖动移动的功能。了解如何实现这些功能,将帮助开发者创建更符合设计需求的用户界面。通过 Qt,我们可以轻松创建无边框窗口,并实现自定义的窗口拖动功能。设置窗口标志为可以去除窗口的边框和标题栏,而处理鼠标事件则可以实现窗口的拖动。这样的设计不仅可以为应用程序提供更现代的外观,还能让用户在窗口中获得更大的自由操作空间。

m0_62599305的博客 1382

Qt实现去掉对话框边框并且窗口可移动

在使用Qt进行界面开发时,有时候我们需要自定义对话框的外观和行为,其中之一就是去掉对话框的边框并且使窗口可移动。通过以上代码和自定义对话框类的实现,我们实现了去掉对话框边框并且使窗口可移动的功能。在上述代码中,我们创建了一个名为CustomDialog的自定义对话框类,继承自QWidget。中,我们判断鼠标点击的是左键,并记录下点击时的鼠标位置和对话框的左上角位置之间的偏移量。首先,我们需要创建一个基于QWidget的自定义对话框类。中,我们根据鼠标移动的位置和偏移量来更新对话框的位置,实现对话框的移动。

DevAstro的博客 449

QT中主窗口setWindowState(Qt::FramelessWindowHint);设置引起子控件背景色无法设置的bug

QT版本:Qt 5.5.1 (MSVC 2013, 32 bit) Qt Creator版本:Qt Creator 3.5.1 (opensource) 系统:win10 在开发工作中需要设置隐藏主界面的窗口标题栏,于是在网上找到了代码: this-&gt;setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏 但是在主界面构造函数中添加该行代码之后发现主...

weixin_43935474的博客 4011

Qt 5.11 无边框可拖动 可改变大小窗口

QWidget 无边框,可拖动,可改变大小窗口。代码简单可复用。主窗口,子窗口都可以使用。

Qt去掉对话框边框并且窗口可移动的实现

Qt开发时,有时需要对窗口进行定制,例如去掉边框,做异形窗口等,做法比较简单,添加几句代码即可。现在构造函数中添加: //去掉边框 this->setWindowFlags(Qt::FramelessWindowHint); 此时,虽然去掉了边框,但是窗口无法移动,需要重写鼠标的按下,移动事件,在头文件中添加如下代码: void mousePr...

琅嬛福地 5999

C++ 程序稳定运行一段时间后异常中止?vc6 运行库的bug!!!

事件查看器提示:错误应用程序 xxxxxxx.exe,版本 0.0.0.0,错误模块 MSVCRTD.DLL,版本 6.0.9782.0,错误地址 0x00012b40。这是一个通信方面的软件,需要长期运行,在压力测试时,高负荷连续运行一定天数时必定崩溃,而且都是在msvcrtd.dll中崩溃。后来在dump文件中发现调用栈在是MSVCRTD.DLL模块,跟踪代码发现是在void * __cdecl _heap_alloc_dbg(        size_t nSize,        int nBloc

qingflying的专栏 2679

【智驾与大模型】端到端与多模态大模型的精彩之旅

智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓!

仿生实验室:从0到1,制作人脸表情交互机器人,记录过程,软硬件全部开源,与君共襄盛举! 1318

Qt实现无边框带阴影边框可移动的窗口

Qt无边框窗口、Qt带阴影的窗口、Qt可移动无边框窗口

weixin_38261823的博客 1404

科研作图不发愁:手把手教你用PyMOL给蛋白-DNA互作图‘美颜’(附完整配色与标注方案)

本文详细介绍了如何使用PyMOL对蛋白-DNA互作结构图进行专业美化,包括从PDB文件加载、结构展示与标注、互作位点突出显示到高质量渲染输出的完整流程。通过具体案例(PDB ID:8SSS)演示了锌指结构域区分、关键残基标注和互作距离测量等实用技巧,帮助科研人员制作可直接用于期刊投稿的高质量示意图。

weixin_42523792的博客 552

QT实现可移动和改变尺寸的无边框窗口

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33738982的博客 297

零基础Python实战:手把手教你用PyGame制作动态烟花效果(附完整代码)

本文为零基础Python编程爱好者提供了一份详细的PyGame实战教程,手把手教你从环境搭建到代码实现,逐步构建一个动态烟花模拟器。教程涵盖了粒子系统、物理模拟(重力与阻力)、效果优化(拖尾与爆炸形态)以及完整的交互式主程序,帮助你通过Python烟花代码项目深入理解图形编程与面向对象设计。

weixin_29062255的博客 256

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 700

Qt 学习之旅 ----可移动的无边框圆角窗口

Qt  默认的窗口会有系统自带的边框   如图 但是在大多数情况下   系统自带的边框是不需要的    去掉边框很简单    在建立窗口时 加入如下一个函数 w.setWindowFlags(Qt::FramelessWindowHint); 这样  边框就被去掉了   但是问题又出来了   不能移动了    因为边框被去掉  系统默认是无法移动的  于是  我

SeeCandy的专栏 3999

Allegro层叠中的介电常数如何填写指导说明

在用Allegro进行PCB设计的时候,需要在cross-section中设置好每个层的信息,包括层命名,每层的厚度等等信息。但是对于有仿真需求或者等长设计需要使用ps作为延时单位的设计的时候,需要额外在层叠中填写介电常数的值,如下图。按照经验值填写为2.8,因为外层和平面层不会被树脂填充,铜皮层还是完整的铜皮,如下图。对应层叠将每层介质的介电常数的数值填入到PCB中去,油墨的介电常数填4。层叠中只给出了每个介质的介电常数,铜皮的介电常数却没有给出。所以正确填写介电常数的结果如下图。需要按照下面的规则来。

weixin_54787054的博客 1391

【Qt】Qt之自定义界面(实现无边框、可移动)【转】

简述 UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性、有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。 爱美之心人皆有之。其实软件界面就像工业造型一样,是产品的重要卖点。一个产品拥有美观的界面会给人带来舒适的视觉享受,拉近人与产品的距离,是建立在科学性之上的艺术设计。 检验一个界面的标准-既不是某个项目开发组领导的意见,也

技术分享,共同成长 743

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成。

kevin1499的博客 2565

玩转Docker | 使用Docker部署MediaCMS内容管理系统

玩转Docker | 使用Docker部署MediaCMS内容管理系统

qq_59334230的博客 2917

纯源码实现Qt无边框窗口FramelessWidget:可移动+可改大小

参考文献: https://blog.youkuaiyun.com/wjh_init/article/details/79244222 完整的工程源码请下载:

$firecat利白的代码足迹$ 1040

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Qt 技巧:去除对话框边框 + 设置窗口可移动和透明

1、去除对话框标题栏和边框 在构造函数里设置:     this->setWindowFlags(Qt::FramelessWindowHint); Qt::Dialog     (按照对话框的形式创建窗口--帮助/关闭) Qt::Window  (按照正常窗口的形式创建窗口--最大化/最小化/关闭) 2、窗口可移动

Jan5_Reyn 9712

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Qt】自定义无边框窗口(可移动控制和窗口大小调整)

QT是一个功能强大的跨平台开发框架,它提供了丰富的界面设计工具和组件。在界面开发中,QT窗口自带的标题栏无法满足我们的需求。我们就需要自定义无边框窗口,包括自定义标题栏和窗口大小调整功能。本文将介绍如何在QT中实现这些功能。

qq_43331089的博客 227

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

QT移动无边框窗口

设计中遇到一个 http://www.xuebuyuan.com/1899289.html

u013224189的专栏 707

Qt 自定义界面(实现无边框、可移动)

设置窗口标志为无边框 this->setWindowFlags(Qt::FramelessWindowHint); 设置无边框之后,窗体是无法移动的,下面我们介绍两种方式来进行移动。 1. Qt事件:重写函数 // 鼠标相对于窗体的位置 event->globalPos() - this->pos() void Widget::mousePressEvent(QMouseEvent *e

swartz_lubel的专栏 1420
上一篇: pugi xml读与写接口
下一篇: Qt实现 文件比较工具
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值