wangwenx190 / framelesshelper

Project moved to: https://github.com/stdware/qwindowkit Cross-platform window customization framework for Qt Widgets and Qt Quick. Supports Windows, Linux and macOS.
MIT License
846 stars 202 forks source link

MacOS最后一个窗口销毁再新建窗口崩溃分析反馈,窗口全屏状态修改分辨率异常问题求助 #323

Open KarserZero opened 10 months ago

KarserZero commented 10 months ago

你好!首先感谢提供的framelesshelper,给了我很大帮助。以下有两个问题想反馈下:

1、最后一个窗口销毁再新建窗口程序会崩溃,经过分析是NSWindowProxy中旧的窗口对象地址和当前窗口对象地址一致导致递归死循环(如oldSetStyleMask、oldSendEvent等),我想你应该是想最后一个窗口释放时重置这些函数指针: ~NSWindowProxy() override { instances.remove(nswindow); if (instances.count() <= 0) { restoreImplementations(); windowClass = nil; } nswindow = nil; } 以上是我目前的解决办法,期望评审是否完善。

2、窗口全屏时,去修改系统分辨率,此时窗口会在上边或者下边留一段黑色的矩形块,需要恢复窗口化,再全屏才能恢复,我目前没分析到原因,期望得到帮助,谢谢!

![Uploading macos.jpg…]()

wangwenx190 commented 10 months ago

第一个问题,你的做法没有问题,请提一个PR(如果方便的话)

wangwenx190 commented 10 months ago

第二个问题,仍然是在macOS系统上吗?需要告知系统版本以及Qt版本

KarserZero commented 10 months ago

第二个问题,仍然是在macOS系统上吗?需要告知系统版本以及Qt版本

还是在MacOS(几个版本都有该问题),Qt的版本是5.15.9,可以直接用FramelessHelperDemo-Widget验证,先将窗口全屏,再去修改屏幕分辨率即可复现。

KarserZero commented 10 months ago

第二个问题,仍然是在macOS系统上吗?需要告知系统版本以及Qt版本

这个问题目前找到的解法如下: nswindow.titlebarAppearsTransparent = (visible ? NO : YES); nswindow.titleVisibility = (visible ? NSWindowTitleVisible : NSWindowTitleHidden); nswindow.hasShadow = YES; nswindow.showsToolbarButton = NO; nswindow.movableByWindowBackground = NO; // nswindow.movable = NO;

看过去是禁止移动,全屏状态下修改分辨率的窗口位置没发生变更,导致了位置偏移,我也尝试过分辨率发生变化时,使用api移动窗口位置,但是并没有效果。去掉这个禁止移动属性,目前我未发现有什么副作用,因为不清楚这行代码的目的,期望评审解法是否完善。

wangwenx190 commented 10 months ago

第二个问题,仍然是在macOS系统上吗?需要告知系统版本以及Qt版本

这个问题目前找到的解法如下: nswindow.titlebarAppearsTransparent = (visible ? NO : YES); nswindow.titleVisibility = (visible ? NSWindowTitleVisible : NSWindowTitleHidden); nswindow.hasShadow = YES; nswindow.showsToolbarButton = NO; nswindow.movableByWindowBackground = NO; // nswindow.movable = NO;

看过去是禁止移动,全屏状态下修改分辨率的窗口位置没发生变更,导致了位置偏移,我也尝试过分辨率发生变化时,使用api移动窗口位置,但是并没有效果。去掉这个禁止移动属性,目前我未发现有什么副作用,因为不清楚这行代码的目的,期望评审解法是否完善。

没什么问题。请你提交一个PR吧,谢谢!