Skip to content
This repository has been archived by the owner on Dec 19, 2023. It is now read-only.

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

Open
KarserZero opened this issue Nov 17, 2023 · 5 comments
Assignees
Labels
bug Something isn't working

Comments

@KarserZero
Copy link

KarserZero commented Nov 17, 2023

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

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

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

Uploading macos.jpg…

@KarserZero KarserZero changed the title MacOS最后一个窗口销毁再新建窗口崩溃分析反馈,窗口全屏状态修改分辨率异常问题求组 MacOS最后一个窗口销毁再新建窗口崩溃分析反馈,窗口全屏状态修改分辨率异常问题求助 Nov 17, 2023
@wangwenx190 wangwenx190 self-assigned this Nov 17, 2023
@wangwenx190 wangwenx190 added the bug Something isn't working label Nov 17, 2023
@wangwenx190
Copy link
Owner

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

@wangwenx190
Copy link
Owner

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

@KarserZero
Copy link
Author

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

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

@KarserZero
Copy link
Author

第二个问题,仍然是在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
Copy link
Owner

第二个问题,仍然是在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吧,谢谢!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants