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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

KarserZero opened this issue · comments

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

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

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

Uploading macos.jpg…

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

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

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

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

第二个问题,仍然是在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移动窗口位置,但是并没有效果。去掉这个禁止移动属性,目前我未发现有什么副作用,因为不清楚这行代码的目的,期望评审解法是否完善。

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