Qt Resize与布局的冲突?

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

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

Qt Resize与布局的冲突?_第1张图片
    
    resize操作的是部件尺寸,当部件可见且试图改变尺寸时,就会立即触发resizeEvent事件。
    ......(中间就不翻译了,关键的是resizeEvent)
    我们来看resizeEvent.

Qt Resize与布局的冲突?_第2张图片
    当resizeEvent被调用后,部件将拥有新的几何尺寸,旧的尺寸将被QResizeEvent::oldSize()保留。

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

    以上是个人分析结果,如有错误,望不吝指教。




FROM: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29650836&id=4515549

你可能感兴趣的:(linux/QT,QT/布局)