Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

调用close后部分功能失效 #18

Closed
zhouybbbb opened this issue Jan 4, 2024 · 7 comments
Closed

调用close后部分功能失效 #18

zhouybbbb opened this issue Jan 4, 2024 · 7 comments
Assignees
Labels
bug Something isn't working fixed

Comments

@zhouybbbb
Copy link

当调用close()关闭窗口后,重新显示时标题栏将无法拖动,不知道是否是特性还是bug。
测试方式:
使用QWKExample_MainWindow项目进行测试
修改代码如下:
MainWindow w;
//w.show();
QPushButton button;
QObject::connect(&button, &QPushButton::clicked, [&w] { w.show(); });
button.show();
return a.exec();

我的qt版本6.5.2 vs2022
经过测试
framelesshelper也存在相同的问题

@SineStriker
Copy link
Contributor

这个问题在qt5上没有,应该是QWidget::close()的实现改了的缘故,给我点时间研究一下。

@zhouybbbb
Copy link
Author

这个问题在qt5上没有,应该是QWidget::close()的实现改了的缘故,给我点时间研究一下。

好的,麻烦了

@wangwenx190
Copy link
Collaborator

调用close后有些资源被Qt释放掉了,导致再次显示窗口会出现问题。不同Qt版本对close的实现不完全一样,所以导致版本不同,表现也不同。我本倾向于将这个问题归结为使用者没有正确使用QWK导致的,但 @SineStriker 决定在有时间时研究解决这个问题,所以就先不close这个issue了。

@wangwenx190 wangwenx190 added the bug Something isn't working label Jan 5, 2024
@zhouybbbb
Copy link
Author

zhouybbbb commented Jan 5, 2024

调用close后有些资源被Qt释放掉了,导致再次显示窗口会出现问题。不同Qt版本对close的实现不完全一样,所以导致版本不同,表现也不同。我本倾向于将这个问题归结为使用者没有正确使用QWK导致的,但 @SineStriker 决定在有时间时研究解决这个问题,所以就先不close这个issue了。

qt5版本和qt6版本的close()完全不同,已经完全重写了,qt6版本6.0和6.1由于编译失败无法测试,6.2及以上版本都会出现此问题,且鼠标点击坐标错位,我没有仔细比较qt6各个版本close()实现是否有太大差别,但我猜测是相同的原因造成的,可能可以对qt5和qt6在底层需要不同的实现。关闭后重新打开窗口是很常规的操作,例如关闭窗口后在托盘显示等。

@wangwenx190 wangwenx190 changed the title 标题栏拖动失效 调用close后部分功能失效 Jan 8, 2024
@wangwenx190
Copy link
Collaborator

关闭后重新打开窗口是很常规的操作,例如关闭窗口后在托盘显示等。

我自己的项目也有这种操作,但我都是hide而不是close。从逻辑上来讲,你需要再次显示出来的话,调用hide将窗口隐藏才更合理吧?

@zhouybbbb
Copy link
Author

关闭后重新打开窗口是很常规的操作,例如关闭窗口后在托盘显示等。

我自己的项目也有这种操作,但我都是hide而不是close。从逻辑上来讲,你需要再次显示出来的话,调用hide将窗口隐藏才更合理吧?

如果调用hide的情况下当所有顶层窗口都关闭的情况下,事件循环无法退出,需要额外的操作判断。而且按照文档来看,普通的close()可以理解为等同于hide()

@SineStriker
Copy link
Contributor

已经修复了,麻烦您试试最新一次提交。

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

No branches or pull requests

3 participants