setGeometry Unable to set geometry问题记录

问题描述

为了添加美化效果,重写了QMainWindow等窗口的标题栏,通过自定义标题栏窗口实现最大化、最小化、还原、关闭等操作。这些操作涉及到窗口的尺寸变化。在调试过程中出现以下问题:

打开一个QMainWindow后,窗口正常显示。最大化窗口后,关闭窗口,再打开窗口。窗口绝大部分控件无法操作,呈现一种"假死"状态。所谓”假死“,是因为窗口与程序主窗口位于相同进程,而程序主窗口可正常显示并操作,该异常窗口也可被鼠标进行拖动,说明程序运行正常,只是该窗口的显示出现的问题。通过log发现抱错如下:

Warning:time:2023-02-27-20-19
QWindowsWindow::setGeometry: Unable to set geometry 1024x576+0+0 (frame: 1024x576+0+0) on QWidgetWindow/“CxxxWidgetClassWindow” on “\.\DISPLAY1”.
Resulting geometry: 1536x824+0+0 (frame: 1536x824+0+0) margins: 0, 0, 0, 0 minimum size: 547x246 MINMAXINFO maxSize=0,0 maxpos=0,0 mintrack=547,246 maxtrack=0,0) qwindowswindow.cpp 1878 void __thiscall QWindowsWindow::setGeometry(const class QRect &)

问题修复

经过调试发现,最大化后的窗口在关闭后再次打开时,窗口的尺寸发生了变化,如错误信息所提示,窗口进行了setGeometry设置还原尺寸的操作。

目前未找到问题的根因。查询部分资料显示该现象由父子窗口尺寸不协调导致,且只出现再Windows系统中。但通过尝试找到了有效解决此问题的方法:

在窗口的resizeEvent()事件处理函数,调用resize()函数重新设置event事件携带的窗口尺寸信息即可。但一般情况下,resizeEvent()事件处理函数不推荐调用窗口尺寸操作相关函数,可能会陷入递归循环问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值