Open ohPigFly opened 1 year ago
mainwindow也有类似的问题。如下图,屏幕1拖动到屏幕2。 如下图,再从屏幕2拖动会屏幕1,变化大小,底栏的白色区域就一直存在。
最新代码还有这个问题吗
这个版本测出来的,#276也是同一个版本。
拉取最新代码试试呢
还是有,但是可恢复,变化一下大小就会恢复了。
我之前参考那种隐藏标题栏写一个简单的自用,也遇到这个类似的问题,下面就多了一截出来,不过我的还多了个标题栏触摸下移了一个标题栏的高度,需要变化一下大小才可以恢复,但是有时候一些固定的框,不能变化大小。我把大小拿出来,会发现第一次移动到屏幕2,大小会变大了一点,大佬有方向么?我也很好奇这个问题。
我之前参考那种隐藏标题栏写一个简单的自用,也遇到这个类似的问题,下面就多了一截出来,不过我的还多了个标题栏触摸下移了一个标题栏的高度,需要变化一下大小才可以恢复,但是有时候一些固定的框,不能变化大小。我把大小拿出来,会发现第一次移动到屏幕2,大小会变大了一点,大佬有方向么?我也很好奇这个问题。
这个问题讲起来有些复杂。总之你观察到的现象是Qt的bug,Qt算错了窗口尺寸。
那现在暂时还没办法能规避掉么?
@ohPigFly 你是指FramelessHelper还是说你自己的项目?
FramelessHelper或者说可以在自己的项目有方法规避都可以
FramelessHelper应该是处理了,不会有这个问题。核心做法是每次切换屏幕都要去更新QWindow的custom margins,并且手动触发一次窗口resize。具体请参考:https://github.com/wangwenx190/framelesshelper/blob/main/src/core/utils_win.cpp#L1172
意思是更改一下FramelessmainWindow,当每次切换屏幕,都要去调用一下Utils::updateInternalWindowFrameMargins么?
意思是更改一下FramelessmainWindow,当每次切换屏幕,都要去调用一下Utils::updateInternalWindowFrameMargins么?
最新代码里已经处理过了,FramelessHelper这边不需要额外改动了。你如果搞了自己的自定义边框,就需要检测屏幕是否改变,改变就要参考我那个函数的做法,更新Qt内部的custom margins
我更新最新代码,是可以了。但是就是会闪一下黑边。
还有最新代码CMake configuring的时候报这个警告,有影响么?
更新后还发现了一个问题就是,我在使用8月份的时候代码还没问题,更新最新版本就会崩溃。 我继承FramelessDialog去封装一个MessageBox,使用了QDialogButtonBox,然后通过QDialogButtonBox里的按键触发会导致了崩溃,按键没有去触发FramelessDialog的closeEvent的事件,但是在使用8月份时候的代码没有崩溃问题。 使用顶栏的关闭按钮就不会出现崩溃的。
一、黑边问题我马上解决下,小问题 二、cmake警告忽略就行,是没有设置版本号的第四位导致的 三、崩溃步骤能详细描述下吗,怎么触发的崩溃?我看你堆栈好像是窗口关闭时遇到问题
1.设置版本号是如何设置? 2.这个崩溃导致,是我仿照原生封装一个MessageBox,然后用到了QDialogButtonBox。你看一下下面能大概看懂不?使用yes或者no都会导致崩溃。我的CutomDialog是继承你的FramelessDialog的,里面只是预先先设置的顶栏的颜色统一起来,其他都一样。
一、是我没有设置FramelessHelper的第四位版本号,不是你那边的问题,你直接忽略这个警告就可以了,没有任何实质问题 二、黑边问题现在应该非常不明显了,麻烦测试一下 三、崩溃问题是我重构造成的,现在应该也解决了,麻烦测试一下
1.黑边问题我要周一再验证一下,我现在没双屏幕。 2.奔溃的问题暂时没了,我会持续再关注;但是出现了这种问题,我在没有弹出过FramelessDialog的情况下,FramelessMainWindow在变化大小不会出现问题;在我弹出了FramelessDialog后,隐藏了,FramelessMainWindow在变化大小就会出现下图的问题。 3.在更新版本后,FramelesMainWindow启动时候会报下图这个警告,我之前自己项目遇见类似这种警告,界面就会出现奇奇怪怪的绘图问题的了,问题2的和这个会不会有关联。
1.测过了,现在没有黑边问题了,就是会慢了一点,先闪一下下图的,大概有差不多1秒左右,才会恢复,这个有没有优化空间? 2.如果不限定大小的话,来回拖动,就会越变越小。
1.黑边问题我要周一再验证一下,我现在没双屏幕。 2.奔溃的问题暂时没了,我会持续再关注;但是出现了这种问题,我在没有弹出过FramelessDialog的情况下,FramelessMainWindow在变化大小不会出现问题;在我弹出了FramelessDialog后,隐藏了,FramelessMainWindow在变化大小就会出现下图的问题。 3.在更新版本后,FramelesMainWindow启动时候会报下图这个警告,我之前自己项目遇见类似这种警告,界面就会出现奇奇怪怪的绘图问题的了,问题2的和这个会不会有关联。
第二个问题,我看截图是我自带的例子,意思是能用我自带的例子触发这个bug?你有修改什么地方吗,还是说用原版例子就可以? 问题3你不用担心,我内部已经处理的比较到位了,一般不会遇到绘图问题。这个警告也跟Qt版本有关,之前我很长时间没遇到了
1.测过了,现在没有黑边问题了,就是会慢了一点,先闪一下下图的,大概有差不多1秒左右,才会恢复,这个有没有优化空间? 2.如果不限定大小的话,来回拖动,就会越变越小。
问题1:时间可以缩短,应该可以进一步优化体验 问题2:来回拖动,是指两个屏幕之间来回拖动吗?用我原版的例子能复现吗?你Qt用的哪个版本?
1.黑边问题我要周一再验证一下,我现在没双屏幕。 2.奔溃的问题暂时没了,我会持续再关注;但是出现了这种问题,我在没有弹出过FramelessDialog的情况下,FramelessMainWindow在变化大小不会出现问题;在我弹出了FramelessDialog后,隐藏了,FramelessMainWindow在变化大小就会出现下图的问题。 3.在更新版本后,FramelesMainWindow启动时候会报下图这个警告,我之前自己项目遇见类似这种警告,界面就会出现奇奇怪怪的绘图问题的了,问题2的和这个会不会有关联。
第二个问题,我看截图是我自带的例子,意思是能用我自带的例子触发这个bug?你有修改什么地方吗,还是说用原版例子就可以? 问题3你不用担心,我内部已经处理的比较到位了,一般不会遇到绘图问题。这个警告也跟Qt版本有关,之前我很长时间没遇到了
你的Demo应该要改一下才可以复现,必须要在使用FramelessMainWindow的时候,也使用一下FramelessDilog,我在关闭软件时候是会用FramelessDilog来做了个提示框。如果我没有去弹出过这个提示框,FramelessMainWindow就不会出现问题,如果弹过之后,就会出现这个问题。
1.测过了,现在没有黑边问题了,就是会慢了一点,先闪一下下图的,大概有差不多1秒左右,才会恢复,这个有没有优化空间? 2.如果不限定大小的话,来回拖动,就会越变越小。
问题1:时间可以缩短,应该可以进一步优化体验 问题2:来回拖动,是指两个屏幕之间来回拖动吗?用我原版的例子能复现吗?你Qt用的哪个版本?
是的,就是在两个屏幕之间来回拖动,屏幕1拖动到屏幕2,需要放开鼠标停顿大概1秒,再点击拖动到另外一个屏幕。我这里不会变化,是因为设置了最小边框大小,demo没有去设置,就会上下高度越来越窄。我用的是Qt5.15.2。
窗口越来越小是Qt的bug,好像6.2还是6.4才修复,但我记得我代码里也有workaround,按理说不应该发生了。我需要再检查一下
1.黑边问题我要周一再验证一下,我现在没双屏幕。 2.奔溃的问题暂时没了,我会持续再关注;但是出现了这种问题,我在没有弹出过FramelessDialog的情况下,FramelessMainWindow在变化大小不会出现问题;在我弹出了FramelessDialog后,隐藏了,FramelessMainWindow在变化大小就会出现下图的问题。 3.在更新版本后,FramelesMainWindow启动时候会报下图这个警告,我之前自己项目遇见类似这种警告,界面就会出现奇奇怪怪的绘图问题的了,问题2的和这个会不会有关联。
第二个问题,我看截图是我自带的例子,意思是能用我自带的例子触发这个bug?你有修改什么地方吗,还是说用原版例子就可以? 问题3你不用担心,我内部已经处理的比较到位了,一般不会遇到绘图问题。这个警告也跟Qt版本有关,之前我很长时间没遇到了
你的Demo应该要改一下才可以复现,必须要在使用FramelessMainWindow的时候,也使用一下FramelessDilog,我在关闭软件时候是会用FramelessDilog来做了个提示框。如果我没有去弹出过这个提示框,FramelessMainWindow就不会出现问题,如果弹过之后,就会出现这个问题。
我不太清楚你是怎么用的,要不你把我demo改造一下,确定能复现你那边的问题后,压缩一下贴上来
1.黑边问题我要周一再验证一下,我现在没双屏幕。 2.奔溃的问题暂时没了,我会持续再关注;但是出现了这种问题,我在没有弹出过FramelessDialog的情况下,FramelessMainWindow在变化大小不会出现问题;在我弹出了FramelessDialog后,隐藏了,FramelessMainWindow在变化大小就会出现下图的问题。 3.在更新版本后,FramelesMainWindow启动时候会报下图这个警告,我之前自己项目遇见类似这种警告,界面就会出现奇奇怪怪的绘图问题的了,问题2的和这个会不会有关联。
第二个问题,我看截图是我自带的例子,意思是能用我自带的例子触发这个bug?你有修改什么地方吗,还是说用原版例子就可以? 问题3你不用担心,我内部已经处理的比较到位了,一般不会遇到绘图问题。这个警告也跟Qt版本有关,之前我很长时间没遇到了
你的Demo应该要改一下才可以复现,必须要在使用FramelessMainWindow的时候,也使用一下FramelessDilog,我在关闭软件时候是会用FramelessDilog来做了个提示框。如果我没有去弹出过这个提示框,FramelessMainWindow就不会出现问题,如果弹过之后,就会出现这个问题。
我不太清楚你是怎么用的,要不你把我demo改造一下,确定能复现你那边的问题后,压缩一下贴上来
不好意思,这段时间忙别的项目去,今天对比,终于知道是怎么才能复现了,好奇怪的,这复现手法。如下图, 1.在mainwindow的closeEvent里面去开启窗口。 2.把弹出的窗口关闭。 3.你会发现顶栏拖动已经失效了,但是显示是正常的,系统按键还正常。 4.点击最大化按键,就会出现这个问题。
如下图,当Dialog从屏幕1拉到屏幕2,ok按键就会点击不了。 如下图,使用Demo-dialog,则需要在屏幕1时候,点击more,让展开到最大。 如下图,当展开到最大,拖动到屏幕2,就会出现折叠了,底部的Search selection就那个部分就不能点击了。 如下图,虽然点击more,可以刷新一下,正常可点击,但是底部会出现了白条,感觉是按照了屏幕1时候的大小来设置了。
如果dialog是没有重新变大变小,就会最底下按钮都会点击不了。我的环境是,屏幕1是1920_1080,屏幕2是2560_1080的,两个屏幕的缩放是设置一样的。
关于这次提的这个双屏问题,我这次项目遇到个类似的,也是显示内容会变更,导致显示不全,然后Qt就报下图的警告,拖动一下顶栏,虽然显示大小会变回正常,但是底部的按键区域还是有一半不能点击,只能点击上半部分有效(因为我高度的变化约是按键高度的一半)。 然后我去参考了一下QMessageBox的源码,他每次更改布局中的内容都会updateSize,主要就是对布局的内容去重新计算。然后我也仿照这样去做,然后就发现重新计算后,更重要需要调用这个layout->activate(),就可以正常了,并不警告了。不知道这个和你这个有没点类似。
closeEvent有些特殊,我会在里面把一些内部数据清理掉,没想到你会在里面继续使用FramelessHelper,确实需要改进。下面那个问题,应该是Qt自己没处理好,我觉得不应该什么都让FramelessHelper去做workaround
1.因为一般会做个退出软件的提示框,所以就在里面使用了;closeEvent里面调用FramelessHelper,之前是没问题的,也是后续才产生这个问题。 2.我也觉得,它自己计算的布局里内容不准,非要自己再去计算才准确;而且如果已经创建出来了界面,再去变动布局里的内容,内容超出显示范围,就要自己去刷新一下布局,不然它也不会show出来的时候更新,要拖动一下才更新。
closeevent这个应该是我没处理好,我去解决
https://github.com/wangwenx190/framelesshelper/blob/main/src/core/framelessmanager.cpp#L153-L158
你看看把这一段注释掉能解决你那个closeevent的问题吗
https://github.com/wangwenx190/framelesshelper/blob/main/src/core/framelessmanager.cpp#L153-L158
你看看把这一段注释掉能解决你那个closeevent的问题吗
可以
https://github.com/wangwenx190/framelesshelper/blob/main/src/core/framelessmanager.cpp#L153-L158 你看看把这一段注释掉能解决你那个closeevent的问题吗
可以
能解决你的问题?注释掉这一段之后,有遇到新的问题吗?
https://github.com/wangwenx190/framelesshelper/blob/main/src/core/framelessmanager.cpp#L153-L158 你看看把这一段注释掉能解决你那个closeevent的问题吗
可以
能解决你的问题?注释掉这一段之后,有遇到新的问题吗?
可以解决,暂时没发现其他问题。
https://github.com/wangwenx190/framelesshelper/blob/main/src/core/framelessmanager.cpp#L153-L158 你看看把这一段注释掉能解决你那个closeevent的问题吗
可以
能解决你的问题?注释掉这一段之后,有遇到新的问题吗?
可以解决,暂时没发现其他问题。
closeEvent的代码提交了,请拉取最新代码
SHA-1: 85a3fe1b2f718ff94f83833241c202ee9ef9908a 最新的我在自己的工程里测试了,暂时还没发现有崩溃的问题。 1.在demo里测试,两个屏幕拖动,还是会有不断缩小的问题,但是这个问题不大,一般正常时候窗体都会固定个最小尺寸。 2.下图来回拖动有1秒延迟,才恢复,请问这个优化已经提交了么?我在demo上测试还是有这个延迟在的。
SHA-1: 85a3fe1 最新的我在自己的工程里测试了,暂时还没发现有崩溃的问题。 1.在demo里测试,两个屏幕拖动,还是会有不断缩小的问题,但是这个问题不大,一般正常时候窗体都会固定个最小尺寸。 2.下图来回拖动有1秒延迟,才恢复,请问这个优化已经提交了么?我在demo上测试还是有这个延迟在的。
第一个问题是Qt的bug,但我之前也提到我已经加了workaround,不知为何你那里没起作用。我再去检查一下。
第二个问题我暂时还没处理,因为目前我加的延迟只有500毫秒,按理说不应该有明显的延迟。不清楚如果继续缩短延迟会不会影响我原本想要实现的效果。
第二个问题我暂时还没处理,因为目前我加的延迟只有500毫秒,按理说不应该有明显的延迟。不清楚如果继续缩短延迟会不会影响我原本想要实现的效果。
影响效果,是会影响其他功能的效果么?如果不是,可以看改哪里是缩短那个延迟,我直接调试看一下效果如何。
第二个问题我暂时还没处理,因为目前我加的延迟只有500毫秒,按理说不应该有明显的延迟。不清楚如果继续缩短延迟会不会影响我原本想要实现的效果。
影响效果,是会影响其他功能的效果么?如果不是,可以看改哪里是缩短那个延迟,我直接调试看一下效果如何。
这个是切换屏幕时强制重绘前的延迟,是防备Qt自己没去刷新,时间间隔太短了不好,可能造成死循环或者没有刷新成功。你调整数值看看,能不能更短一点
第一个问题请参考这个:
你看看你那边程序有没有进入这个分支,按理说只要进入了这个分支,窗口就不会越来越小。既然你那边能复现你的问题,麻烦你那边帮忙调试下看看
kRepaintTimerInterval
不好意思,这几天电脑坏了。 我改了个300ms,可以的,没有看到那个延迟,而且窗口也不会越来越小。但是就是在第一次拖动的过去的时候,大概率不会刷新,500ms的时候也会这样子的。
kRepaintTimerInterval
不好意思,这几天电脑坏了。 我改了个300ms,可以的,没有看到那个延迟,而且窗口也不会越来越小。但是就是在第一次拖动的过去的时候,大概率不会刷新,500ms的时候也会这样子的。
我根据你的反馈改了,请测试下最新代码。第一次不刷新是我故意设置的,也一并改了,你测测看呢
已经可以了,硬件环境是在两个分辨率(1920*1080)一样的屏幕去测的,暂时没发现问题。 可以告知一下大概原因么?为何更改了300ms后,窗口也不会越变越小了?
已经可以了,硬件环境是在两个分辨率(1920*1080)一样的屏幕去测的,暂时没发现问题。 可以告知一下大概原因么?为何更改了300ms后,窗口也不会越变越小了?
不清楚,我只改了延迟。难道你那边换了Qt版本?
没有,还是用5.15.2。虽然重新安装过,但是我试过用500ms编译出来的,现象是一样的,用300ms就没问题了。
发现了个问题了,如果是锁定了大小的窗口,拖动鼠标刚好移动到屏幕交界处,然后释放,界面停在这里,就会不断resize,这个能不能优化一下这个临界点的情况。下图红色标记处是我的屏幕1和屏幕2的交界处。
可能还是Qt的bug
如果确定是Qt的bug,那我先暂时关闭了问题?
如下图,当Dialog从屏幕1拉到屏幕2,ok按键就会点击不了。 如下图,使用Demo-dialog,则需要在屏幕1时候,点击more,让展开到最大。 如下图,当展开到最大,拖动到屏幕2,就会出现折叠了,底部的Search selection就那个部分就不能点击了。 如下图,虽然点击more,可以刷新一下,正常可点击,但是底部会出现了白条,感觉是按照了屏幕1时候的大小来设置了。
如果dialog是没有重新变大变小,就会最底下按钮都会点击不了。我的环境是,屏幕1是19201080,屏幕2是25601080的,两个屏幕的缩放是设置一样的。