• 6082阅读
  • 6回复

[提问]鼠标在窗口外时窗口大小无法自动调整 [复制链接]

上一主题 下一主题
离线gongyuwei
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-27
最近编一个小程序,在一个父widget里面用QGridLayout管理很多个子widget,当前可见的子widge只是其中一部分,剩下的可以用滚动条上下翻页,现在希望当父widget的大小改变时,为了保持当前显示的子widget的数量不变,就要相应调整子widget的大小,于是我重新定义了父widget的resizeEvent函数,在里面重新设置子widget的大小,现在用鼠标缩放都是没问题的,最大化也没有问题,但是当双击程序标题栏,让程序回复之前大小时,如果程序缩小后,鼠标在程序main窗口之外,子widget就不更新大小,要动一下鼠标才行,如果程序恢复大小后,鼠标仍然落在main窗口内,也能正常调整大小,有人曾经遇到过这种情况吗?
离线dbzhang800

只看该作者 1楼 发表于: 2014-07-28
但是当双击程序标题栏,让程序回复之前大小时,如果程序缩小后,鼠标在程序main窗口之外,子widget就不更新大小


你是说,这种情况下,main窗口的 resizeEvent() 没被调用么?
离线彩阳

只看该作者 2楼 发表于: 2014-07-28
这提问……一个逗号逗到底了。
如果你当前无法实现子控件的大小和位置的变化,那么可以使用qApp->postEvent()来自己发送消息。
上海Qt开发联盟,热忱地欢迎你的加入!
离线gongyuwei

只看该作者 3楼 发表于: 2014-07-28
感谢上面两位的回复,这个情况确实太诡异,表达能力又有限,下午我传几张图来说明吧
离线gongyuwei

只看该作者 4楼 发表于: 2014-07-28


这个是程序最大化的时候,当前显示的是6个子widget,鼠标在图中标题栏的黑点处,我希望当我双击的时候,程序恢复之前的大小,这六个子widget能相应缩小,使当前看到的子widget数仍是6个,就是下面这样


这个双击后鼠标在标题栏的黑点处,鼠标在主程序范围内,是按照我说的工作的


但是当之前程序位置比较靠下,双击后鼠标在主程序外,这个时候子widget就不能自动调整大小了,要动一下鼠标,或随便按一下键盘才会恢复第二张图的样子,现在的问题就是这样
另外,我是通过重写了父widget的resizeEvent函数,在里面根据父widget的尺寸计算6个子widget的大小,然后设置这些子widget的最小尺寸,来调整子widget的大小的
离线dbzhang800

只看该作者 5楼 发表于: 2014-07-28
你应该重点关注一下,在这种情况下:是你父widget的resizeEvent没被调用,还是resizeEvent被调用了,但是此时的QResizeEvent中的大小或父widget的 size() 返回的大小不对。
离线gongyuwei

只看该作者 6楼 发表于: 2014-07-28
试了一下,父widget的resizeEvent函数被调用了,子widget尺寸更改也完成了,而且是在第3个图的这种情况发生的时候,尺寸更改就已经完成了,只是在后来动了一下鼠标之后才更新尺寸。子widge的尺寸计算应该是对的,不然后来更新的尺寸就不会是对的了。我设置这些子widget的尺寸用的是setMinimumSize函数,因为水平方向不使用滚动条,setMinimumSize函数设置的宽度就用了1,设置的高度是父widget除以显示行数。这些子widget都放在一个QGridLayout里面,貌似子widget的尺寸是Layout根据setMinimumSize函数自动调整的,只是不知道为什么当鼠标在主窗口之外时,Layout不自动更新子widget的高度,而后面动了一下鼠标又触发了什么,使它能够更新?
快速回复
限100 字节
 
上一个 下一个