Qt::FramelessWindowHint导致对话框无法居中及Qt::QWidget的geometry()函数的测试

Qt实战:万能的无边框窗口(FramelessWindow) 之前也看了不少Qt实现FramelessWindow的例子,不是很复杂就是不通用。通过上面的实现,现在已完成了一个通用的版本,只要将自己的窗口设置到ContentWidget即可。界面的分层,感兴趣的朋友可以尝试下,如果没有XWidget这一层会有什么效果,ContentWidget边框效果会失效,这样当然就达不到预期结果了;启用了WA_Hover鼠标悬浮追踪,如果不启用,鼠标的移动事件可能会被子控件覆盖,这样就不会知道鼠标是否到达边框位置,从而无法正确设置鼠标的形状; 阅读详情

1.问题

需要对弹出的对话框相对进行居中,但无边框对话框正常显示会导致偏差了几个相素。于是手动move的方法。大概代码如下。思路是通过获取当前窗口父窗口原点位置计算子窗口的偏移move达到居中的效果。然后在过程中发现了geometry()返回的值x,y比较怪异。

void AlignCenter(QWidget* parent)
{
    if (!parent) return;
    QRect pRect = parent->geometry();

    int x, y;
    if (parent->parent())
    {
        QPoint globPos = parent->mapToGlobal(QPoint(0, 0));
        x = globPos.x() + pRect.width() / 2 - this->width() / 2;
        y = globPos.y() + pRect.height() / 2 - this->height() / 2;
    }
    else
    {
        x = pRect.x() + pRect.width() / 2 - this->width() / 2;
        y = pRect.y() + pRect.height() / 2 - this->height() / 2;
    }
    this->move(x, y);
}

2.geometry()函数

先上一段文档,从文档中可以看出是相对其父窗口的。并且排除了窗口边框。但在实际过程中发现QDialog及其子类获取的Rect的x及y坐标并不是相对其父窗口的。

 

3.测试结论

如文档所言,geometry相对于其父窗口而言对于QWidget是生效的。但QWidget和QDialog多个父子窗口嵌套的情况下.Dialog的geometry获取的rect中的x,y始终是相对一屏幕左上向角的原点坐标系。

 

附图参考自网络

Qt无边框窗口开发:解决鼠标拖拽与事件穿透的实战指南 在桌面应用开发中,自定义UI界面常需移除系统默认边框,这带来了核心交互挑战:如何实现窗口移动与事件响应的平衡。Qt框架的事件处理机制为此提供了基础,通过重写鼠标事件、事件过滤器或调用原生API,开发者可精确控制事件流。理解事件传播原理与窗口属性,对于构建稳定、响应灵敏的自定义界面至关重要。本文聚焦于无边框窗口场景,深入剖析鼠标拖拽与事件穿透(如WA_TransparentForMouseEvents)的协同解决方案,涵盖从基础概念到跨平台实践的完整路径,助力实现类似音乐播放器、视频编辑器等现代化应用的流畅交 阅读详情

相关推荐

桌面AI Agent开发实战:从创意到工程落地的完整实现指南

桌面AI Agent是一种融合了图形界面、智能对话与任务执行的桌面应用程序,其核心原理在于将大语言模型(LLM)的决策能力与本地系统交互相结合。通过异步编程和多线程技术,AI Agent能够在后台处理复杂计算,同时保持前端界面的流畅响应,这一架构设计对于提升用户体验至关重要。在技术价值层面,桌面AI Agent不仅实现了自然语言交互的智能化升级,还为个性化桌面助手、自动化工作流等场景提供了可扩展的解决方案。典型的应用场景包括虚拟桌宠、智能办公助手以及教育娱乐工具,这些场景均依赖于稳定的GUI框架与高效的AI

weixin_33991418的博客 421

Qt::FramelessWindowHint无边框化,移动,大小调整

QT工作笔记壹导读开发环境QT界面无边框方法1方法2引用 导读 最近工作一个项目需要用QT设计一个UI,看了一下目前主流商业化UI,例如扣扣,微信,网易云音乐…结合个人审美(本人非美术专业,但游戏经验丰富,对人机交互界面有个人看法),目前界面风格都是扁平化,纯色调,简单易懂。下面是网易云音乐的效果,本人比较喜欢科技风,类似《使命召唤》和《钢铁侠》风格交互。 系统的标题栏和按钮太传统,想在自定义标题...

gongzhengyu的博客 3万+

[Qt]不带标题栏(FramelessWindowHint)的窗体移动及调整大小

Qt窗体若设置了 setWindowFlags (Qt::FramelessWindowHint); 运行后该窗体是无法进行移动和调整大小的,那要如何才能让它和普通窗体一样进行移动和调整其大小的呢?方案如下: void QFramelessWindow::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->m_drag = true;

我不是码农的博客~~~ 2775

setWindowFlags(Qt::FramelessWindowHint)是什么意思

是一个窗口标志(Window flag),用来移除窗口的边框,因此窗口将不会显示标题栏和关闭、最小化、最大化等按钮。这常常用于创建自定义的窗口样式,或者你想要完全控制窗口的样式和行为。是Qt框架中用来设置窗口样式的一个函数。Qt是一个用于开发GUI应用程序的跨平台C++库。后,你可能需要手动实现窗口的移动和关闭等功能,因为默认的标题栏控件将不再存在。这段代码的整体意思是:设置当前窗口为无边框样式。函数允许你改变窗口的一些基本属性。

电脑管家 4347

Qt之QDialog 设置Qt::FramelessWindowHint后窗口不显示

简述 QDialog自带的标题栏或者样式可能不是我们想要的,当我们打算重写标题栏或者去掉标题栏或者更改为圆角窗体时我们通常是使用Qt::FramelessWindowHint先去掉标题栏,然后使用Qt::WA_TranslucentBackground使窗体透明;但是这里会有一个问题: // 方式一不显示窗口 QDialog *p1 = new QDialog(this); p1->setWindowFlags(Qt::FramelessWindowHin...

Ilson_的博客 4302

5分钟搞定!用Keil MDK将STM32F103C8T6工程无缝迁移到ZET6开发板

本文详细介绍了如何在Keil MDK环境下快速将STM32F103C8T6工程迁移到ZET6开发板,涵盖硬件差异对比、工程配置调整、外设适配及编译排错等关键步骤,帮助开发者5分钟内完成工程移植,大幅提升开发效率。

weixin_30879169的博客 409

QT_绘图原理双缓冲机制

本文从 Qt 窗口 API 基础出发,逐步深入到 QPainter 绘图框架,最后通过手绘板案例完整演示了双缓冲机制的设计与实现。

前端开发工程师 798

玩转ubuntu18 --机器视觉方面(yolo算法识别及摄像头和cmake问题解决)

玩转ubuntu18 --机器视觉方面(yolo v3算法识别) 1.YOLO的简介 工作原理 先前的检测系统重新调整分类器或本地化器以执行检测。他们将模型应用于多个位置和比例尺的图像。图像的高分区域被视为检测。 我们使用完全不同的方法。我们将单个神经网络应用于整个图像。该网络将图像划分为区域,并预测每个区域的边界框和概率。这些边界框按预测概率加权。 我们的模型比基于分类器的系统具有几个优势。它在测试时间查看整个图像,因此其预测由图像中的全球上下文提供信息。它还通过单一网络评估进行预测,这与R-CNN等系统

qq_53951823的博客 1556

PyQt6实现桌面窗口化:无边框可拖动界面与动画效果实战

在GUI开发中,无边框窗口和属性动画是构建现代交互界面的关键技术。无边框窗口通过移除系统默认标题栏和边框,为自定义界面设计提供了基础,而属性动画则能平滑过渡窗口的位置、大小和透明度等视觉属性。这些技术组合起来,能够显著提升应用的专业感和用户体验,尤其适用于需要灵活交互的桌面应用场景。本文以PyQt6框架为例,深入解析如何利用FramelessWindowHint和QPropertyAnimation等核心特性,实现一个可自由拖动、带动画效果的桌面时钟应用,为开发悬浮窗、仪表盘等桌面工具提供了一套完整的工程实

weixin_30905133的博客 355

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1822

液态神经网络系列(四) | 一条 PyTorch 从零搭建 LTC 细胞

本文详细介绍了如何从零开始用PyTorch实现Liquid Time-constant Networks(LTC)神经元模型。首先将LTC的核心微分方程拆解为输入电导、系统时间常数和数值积分器三个模块,然后逐步构建LTCCell类,包括物理参数初始化、突触参数设置和前向演化过程。文章还展示了如何封装LTCModel处理不规则时间序列,并通过正弦波抗干扰实验验证了LTC模型的优越性。最后讨论了数值稳定性、计算代价等实现细节,并预告了下一篇将探讨使用伴随灵敏度算法优化显存占用的方法。

wyj333333的博客 2070

Qt无边框窗口自定义标题栏实现:从事件处理到跨平台优化

在桌面应用开发中,图形用户界面(GUI)的定制化是提升应用品牌辨识度和用户体验的关键。Qt框架作为跨平台C++ GUI开发的主流选择,其事件处理机制和部件系统为深度定制提供了基础。通过重写鼠标事件(mousePressEvent、mouseMoveEvent等)和布局管理,开发者可以拦截并处理用户交互,实现原生窗口管理器功能,如窗口拖拽、边缘拉伸和状态控制。这一技术方案的核心价值在于突破了操作系统默认外观的限制,为现代化、扁平化设计的工具软件、媒体播放器或仪表盘应用提供了统一的视觉风格和沉浸式体验。本文以Q

weixin_33726313的博客 420

EPLAN电气设计精华 -模拟量传感器画法全解

本文介绍了EPLAN中模拟量压力传感器的标准画法要点,重点解析了电流型(4-20mA)、电压型(0-10V/0-5V)和特定应用型三种传感器的核心特点、典型符号、接线方式及应用场景。文章提供了EPLAN设备标识符示例,并分享了一个实际项目案例(XJC-Y01-20-4M传感器配合XJC-608T-F变送器和GSEE.GXLK-AI4S-I模块的应用),强调绘制前查阅技术资料的重要性。内容简明实用,有助于规范电气设计中的传感器绘制。

Qinmingyue13的博客 1182

Qt 6窗口系统架构与性能优化全解析

现代GUI框架的窗口系统是用户界面的核心基础设施,其架构设计直接影响应用性能和跨平台兼容性。Qt 6通过重构窗口合成器和统一渲染管线,实现了QWidget与QML组件的高效协同。从技术原理看,窗口系统本质是平台原生窗口的抽象层,Qt通过QWindow类封装了不同操作系统(Windows/macOS/Linux)的底层实现细节。在工程实践中,开发者需要掌握窗口类型选择策略(如QMainWindow与QQuickWindow的内存开销差异)、混合渲染技术(QWidget嵌入QML)以及跨平台特性适配方案。特别是

weixin_33910460的博客 332

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2962

Python PyQt5开发桌面宠物:从零构建交互式桌宠应用

桌面应用开发是GUI编程的核心领域,其原理在于通过事件驱动模型响应用户交互。在Python生态中,PyQt5作为跨平台GUI框架,因其开发效率高、功能完善而备受青睐,能够快速构建无边框、透明背景的窗口应用。这种技术不仅可用于开发传统软件,还能创造有趣的桌面伴侣,例如具备动画、交互和状态管理的桌面宠物。本文以PyQt5为核心,结合事件处理和定时器机制,详细讲解如何实现一个可拖拽、能响应空闲检测的桌宠应用,涵盖从环境搭建、核心类设计到系统托盘集成和打包分发的完整流程,为开发者提供一套可复用的桌面应用开发实践方案

weixin_30684743的博客 422

YOLO26 改进 | 基于特征蒸馏 | 知识蒸馏 (Response & Feature-based Distillation)

本文系统介绍了YOLO26中的知识蒸馏技术,包含五大核心方法:基于响应的蒸馏(学习分类概率)、基于特征的蒸馏(学习中间层表示)、基于关系的蒸馏(学习特征关联)、通道维度蒸馏(CWD)和前景背景分离蒸馏(FGD)。文章深入解析了每种方法的数学原理与实现细节,并提出动态训练策略,包括一致性匹配和蒸馏权重退火机制。通过教师模型向学生模型传递"暗知识",在保持模型轻量化的同时逼近大模型性能。配套代码支持模块化组合不同蒸馏方法,为YOLO26模型压缩提供了一套完整的解决方案。

weixin_51988935的博客 275

Python PyQt5桌面宠物应用开发:从零实现可交互桌宠MVP

桌面应用开发是GUI编程的核心领域,涉及图形界面、事件处理与用户交互等基础技术。其原理在于通过框架提供的组件构建窗口、管理控件并响应系统事件,实现直观的软件界面。在技术价值上,掌握桌面开发能力能帮助开发者构建独立、高效的本地软件,尤其适合需要复杂交互或离线运行的工具类应用。PyQt5作为Python的GUI框架,凭借其跨平台特性和丰富的组件库,成为快速开发桌面程序的优选方案。应用场景广泛,从工具软件、媒体播放器到个性化桌面组件均可覆盖。本文聚焦于利用PyQt5实现一个可交互的“桌宠”应用,通过构建无边框窗口

weixin_34013044的博客 437

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

桌面宠物开发实战:从架构设计到性能优化的模块化实现指南

桌面应用开发是连接用户与系统交互的重要领域,其核心在于构建稳定、高效且用户体验良好的客户端程序。其原理涉及图形渲染、事件处理、资源管理与进程通信等多个技术层面。在技术价值上,一个设计良好的桌面应用不仅能提升用户效率,更是对开发者软件工程能力的综合考验,尤其在需要长期后台运行、低资源占用的场景中。常见的应用场景包括系统工具、即时通讯软件以及本文聚焦的桌面宠物(Desktop Pet)等交互式常驻应用。开发这类应用常面临动画卡顿、内存泄漏和代码结构混乱等挑战。通过采用模块化架构分离渲染引擎、状态机与资源管理,并

weixin_30328063的博客 699

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Windows 11桌面宠物复活教程:Python+PyQt5打造离线版QQ宠物

桌面宠物是一种常驻操作系统桌面的小型交互式应用程序,通过图形界面和状态机模拟生命行为,为用户提供趣味性互动。其技术原理基于无边框透明窗口、定时器驱动的状态更新和鼠标事件响应,核心价值在于低资源占用和高可定制性。在工程实践中,开发者常使用Python结合PyQt5或Pygame库实现跨平台桌面宠物应用,这类项目不仅承载着80、90后的数字情感记忆,更成为学习GUI编程和状态机设计的绝佳案例。本文以复活经典QQ宠物为主题,详细讲解如何利用Python环境配置、PyQt5界面开发和资源管理技术,从零构建一个完全离

weixin_34246551的博客 474

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Qt开发不带标题栏(FramelessWindowHint)的窗体移动及调整大小

Qt窗体若设置了运行后该窗体是无法进行移动和调整大小的,那要如何才能让它和普通窗体一样进行移动和调整其大小的呢?本文的方案还附加了一个自动吸附功能,各位如果不需要的话,可以移除。最后郑重提醒:别忘了在构造函数加上这句setMouseTracking(true);切记切记!!!

hw5230的博客 2631

qt设置窗口为无边框模式 Qt::FramelessWindowHint 后窗口不显示问题解决

之前写自定义窗口类时,给窗口设置无边框、圆角,三步走,从未失手;2,.cpp里paintEvent事件里加上。1,.cpp构造函数里加上下面两句。

Liuxy_Cjiajia_hh的博客 1159

Qt无边框窗体-最大化时支持拖拽还原

文章目录一、概述二、效果展示三、demo制作1、设计窗体2、双击放大四、拖拽五、相关文章 原文链接:Markdown模板 一、概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮,那么自定义界面就必不可少。其中有一个操作就是是我们每一个Qter开发者都要会的,而且是经常进行的。 Qt::FramelessWindowHint这个属性想必大家都使用过,有些同学可能对这个属性很了解,也用的...

朝十晚八 1345

Qt学习笔记 Qt::FramelessWindowHint 导致窗口消失

给窗口去掉边框的时候,遇到问题 void Dialog::on_pushButton_clicked() { // 设置无边框 this->setWindowFlags( Qt::FramelessWindowHint ); } 设置Qt::FramelessWindowHint后,窗口消失不见 解决办法:调用show()重新显示窗口 void ...

xjcwzp的专栏 5461

[Qt] 手把手教你制作一个无边框窗口

创建一个Qt无边框窗体

qq_41784218的博客 4997
上一篇: VS2015控制调试信息的编译选项
下一篇: 主线程退出,全局静态对象析构导致工作线程访问崩溃的问题
lsfreeing
博客等级 码龄12年 145粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值