Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371918
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 641
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-09 22:35
个人简介

不怕你失败,就怕你爬不起来。

文章分类

全部博文(50)

文章存档

2014年(50)

我的朋友

分类: 嵌入式

2014-09-30 12:05:12

    问题的产生:
    我用QSplitter创建一个窗口布局之后,由于使用窗口默认初始大小,显示出来的比例不是很好看,因此调用了resize进行窗口大小的调整。调整之后是获得了想要的窗口大小,但是与此同时,却发现了一个问题,也就是经过resize之后的窗口无法使得其中的部件自适应窗口的拉伸了,不论是上下左右,都没有自适应。

    问题的分析:
    经过长达两个小时的检查,发现如果在布局之前使用resize就不会出现以上所表述的问题,而在布局之后使用resize就会出现如上所表述的问题。于是翻阅了Qt 的 resize API文档,终于发现了问题所在。


    
    resize操作的是部件尺寸,当部件可见且试图改变尺寸时,就会立即触发resizeEvent事件。
    ......(中间就不翻译了,关键的是resizeEvent)
    我们来看resizeEvent.


    当resizeEvent被调用后,部件将拥有新的几何尺寸,旧的尺寸将被QResizeEvent::oldSize()保留。

    问题的总结:
    综上,resize会调用resizeEvent,并对部件窗口进行重绘,而旧的窗口将被替换保留。在布局之前使用resize,可以调整窗口大小,此时布局尚未建立,因此并不影响拉伸。而在布局之后使用resize,虽然调整了窗口,但是新的尺寸将被定格下来,替换旧的尺寸,因此可能造成布局的自适应效果失效。

    以上是个人分析结果,如有错误,望不吝指教。
阅读(6517) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~