问题的产生:
我用QSplitter创建一个窗口布局之后,由于使用窗口默认初始大小,显示出来的比例不是很好看,因此调用了resize进行窗口大小的调整。调整之后是获得了想要的窗口大小,但是与此同时,却发现了一个问题,也就是经过resize之后的窗口无法使得其中的部件自适应窗口的拉伸了,不论是上下左右,都没有自适应。
问题的分析:
经过长达两个小时的检查,发现如果在布局之前使用resize就不会出现以上所表述的问题,而在布局之后使用resize就会出现如上所表述的问题。于是翻阅了Qt 的 resize API文档,终于发现了问题所在。
resize操作的是部件尺寸,当部件可见且试图改变尺寸时,就会立即触发resizeEvent事件。
......(中间就不翻译了,关键的是resizeEvent)
我们来看resizeEvent.
当resizeEvent被调用后,部件将拥有新的几何尺寸,旧的尺寸将被QResizeEvent::oldSize()保留。
问题的总结:
综上,resize会调用resizeEvent,并对部件窗口进行重绘,而旧的窗口将被替换保留。在布局之前使用resize,可以调整窗口大小,此时布局尚未建立,因此并不影响拉伸。而在布局之后使用resize,虽然调整了窗口,但是新的尺寸将被定格下来,替换旧的尺寸,因此可能造成布局的自适应效果失效。
以上是个人分析结果,如有错误,望不吝指教。
阅读(6517) | 评论(0) | 转发(0) |