Qt Creator 窗体控件自适应窗口大小布局
常見的軟件窗口大小改變(最大化、手動(dòng)改變時(shí))需要窗口的部件能夠自適應(yīng)布局,而在Qt的應(yīng)用程序界面設(shè)計(jì)中,對(duì)于像我一樣的初學(xué)者如何實(shí)現(xiàn)窗口自適應(yīng)調(diào)整還是要繞點(diǎn)彎路的。網(wǎng)上百度了很多,多數(shù)說的很含糊,還有很多是用程序?qū)崿F(xiàn)的,既然已經(jīng)有Qt Creator那么高集成度的工具了,我還是傾向于直接在Qt Creator中通過可視化配置的方式完成,一是所見即所得,而是效率要高不少。
Qt中如果想實(shí)現(xiàn)窗體內(nèi)空間隨著窗體大小調(diào)整,必須使用布局管理,常用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout,空的地方使用spacer控件進(jìn)行填充,因此首先將窗體空間使用布局管理典型應(yīng)用如下圖所示。
我這里使用QGridLayout,按住Ctrl多選需要布局的窗體控件,右鍵-布局-柵格化局,根據(jù)需要進(jìn)行調(diào)整。
要想是控件根據(jù)窗體進(jìn)行調(diào)整,最為重要的一點(diǎn)就是設(shè)置窗口部件的大小策略,各控件均有這一項(xiàng)設(shè)置,如下圖所示。
這部分具體的參數(shù)解釋摘錄如下:
結(jié)合控件的SizePolicy屬性,來控制布局管理中的控件的尺寸自適應(yīng)方式。
控件的sizePolicy說明控件在布局管理中的縮放方式。Qt提供的控件都有一個(gè)合理的缺省sizePolicy,但是這個(gè)缺省值有時(shí)不能適合所有的布局,開發(fā)人員經(jīng)常需要改變窗體上的某些控件的sizePolicy。一個(gè)QSizePolicy的所有變量對(duì)水平方向和垂直方向都適用。下面列舉了一些最長用的值:
A. Fixed:控件不能放大或者縮小,控件的大小就是它的sizeHint。
B. Minimum:控件的sizeHint為控件的最小尺寸。控件不能小于這個(gè)sizeHint,但是可以
放大。
C. Maximum:控件的sizeHint為控件的最大尺寸,控件不能放大,但是可以縮小到它的最小
的允許尺寸。
D. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者縮小
E. Expandint:控件可以自行增大或者縮小
注:sizeHint(布局管理中的控件默認(rèn)尺寸,如果控件不在布局管理中就為無效的值)
所以對(duì)于需要根據(jù)窗口大小對(duì)應(yīng)改變的部件我這里就設(shè)置為Expandint。
在部件大小策略的下方還有伸縮因子的設(shè)置,用于設(shè)置窗口部件在伸縮過程中的對(duì)應(yīng)比例,這部分可以自行摸索。
要想實(shí)現(xiàn)隨著窗口自動(dòng)縮放,很重要的一點(diǎn)是需要設(shè)置頂級(jí)布局,對(duì)于一個(gè)窗口來說,只能有一個(gè)布局成為它的頂級(jí)布局,而剛剛的設(shè)置還只是控件之間的布局,因此需要放入窗體布局中進(jìn)行布局。
在沒有控件的地方右擊-布局-在狀體布局中布局,如下圖所示:
接下來把需要布局的布局拖放到窗體布局中,這兒可以在右側(cè)對(duì)象中選擇,然后將控件向上拖入紅框中(發(fā)現(xiàn)這一步不做也可以,直接進(jìn)行下一步,不清楚在窗體布局中布局這項(xiàng)是啥區(qū)別),最后再在窗體沒有控件出右擊-布局-選擇水平或者垂直布局(因?yàn)槲抑耙呀?jīng)是柵格布局了,相當(dāng)于只有一個(gè)整體布局,因此這里選擇哪一個(gè)沒有區(qū)別)下圖是操作前后對(duì)象窗口的對(duì)比。
布局完成后效果如下:
到這兒,窗體就可以自由縮放了,由于我這里是使用label控件顯示圖像,因此窗體大小調(diào)整,圖像會(huì)自動(dòng)調(diào)整。
總結(jié):一開始繞彎主要在兩個(gè)地方,一個(gè)是控件的SizePolicy屬性設(shè)置,二是一定要設(shè)置頂級(jí)布局。
★emouse 思·睿博客文章★ 原創(chuàng)文章轉(zhuǎn)載請(qǐng)注明:http://emouse.cnblogs.com總結(jié)
以上是生活随笔為你收集整理的Qt Creator 窗体控件自适应窗口大小布局的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NAU8810相关问题
- 下一篇: dnf带人领主要给钱吗我要给他吗