在Qt 中,QWidget有兩個(gè)屬性maximumSize和minimumSize ,這兩個(gè)分別表示窗口大小能拉伸到的最大值,以及能縮小到的最小值。
這兩個(gè)屬性通過這個(gè)兩個(gè)函數(shù)設(shè)置,setMaximumSize(const QSize &),setMinimumSize(const QSize &)。
在查看文檔中發(fā)現(xiàn)有一個(gè)setFixedSize(const QSize &s)函數(shù),這個(gè)函數(shù)就是將maximumSize和minimumSize全部都設(shè)置為參數(shù)S指定的大小。
ps:承載Layout的Widget就是通過調(diào)用setLayout(pLayout)函數(shù)的widget。
關(guān)于Qt的Layout一開始接觸時(shí),各種不習(xí)慣,放到Layout里面管理的控件莫名其妙被縮小或者被拉伸,自己通過resize設(shè)置控件的大小也不管用,以及承載Layout的Widget也無法自己控制其大小??傊褪歉鞣N不習(xí)慣。
到后使用的多發(fā)現(xiàn)Qlayout里面有一個(gè)屬性SizeConstraint,以及QWidget里面有個(gè)屬性SizePolicy,QLayout就是差不多是通過這兩個(gè)屬性來控制控件和窗口的。sizepolicy只有Widget受layout管理時(shí)才有效,也就是將widget添加到Layout里面去。
這兩個(gè)屬性理解起來比較的蛋疼,我是這樣理解的不知道對還是不對,SizeConstraint是Layout用來控制承載Widget的,而sizepolicy只是管理控件的。
對于SizeConstraintQt文檔的說明看到有點(diǎn)蛋疼,我后面自己摸索理解的如下:
QLayout::SetDefaultConstraint
這是默認(rèn)值,和QLayout::SetMinimumSize一樣
QLayout::SetFixedSize
承載Widget的大小由Layout控制,和Layout的大小一樣,承載widget無法被拉伸和收縮。而Layout的大小由其內(nèi)部控件進(jìn)行控制,當(dāng)其內(nèi)部控件大小變化時(shí),Layout的大小也將會(huì)變化,從而帶動(dòng)承載Widget大小變化。
QLayout::SetMinimumSize
設(shè)置承載Widget的MinimumSize為QLayout的MinimumSize。
QLayout::SetMaximumSize
設(shè)置承載Widget的MaximumSize為QLayout的MaximumSize。
QLayout::SetMinAndMaxSize
設(shè)置承載Widget的MaximumSize和MinimumSize為QLayout的MinimumSize。
QLayout::SetNoConstraint
不對承載Widget大小進(jìn)行任何約束,也就是說承載Widget的屬性都由自己管理。
對于sizepolicy 我的的理解是:
QSizePolicy::Fixed
控件大小是使用控件的sizeHint()提供的值,控件不會(huì)被Layout拉伸或者縮放。
QSizePolicy::Minimum
控件的siziHint()提供的值是控件大小的最小值,部件可以被Layout拉伸。
QSizePolicy::Maximum
控件的sizeHint()提供的值是控件大小的最大值,部件可以被Layout壓縮。
QSizePolicy::Preferred
控件的sizeHint()提供的大小是控件的最佳大小,可以被Layout拉伸或者壓縮。
QSizePolicy::Expanding
控件的sizeHint()提供的大小是合適的大小,控件可以被壓縮,不過更傾向于拉伸來獲得更多的空間
QSizePolicy::MinimumExpanding
控件的sizeHint()提供的大小是控件大小的最小值,部件傾向于被拉伸來獲取更多的空間
QSizePolicy::Ignored
sizeHint()的值被忽略,控件將盡可能的被拉伸來獲取更多的空間。
關(guān)于siziHint()是由Qt自己計(jì)算出來的,我們無法控制。當(dāng)我們想控件大小由自己控制,不由Layout控制,
我們可以通過setFixedSize(const QSize &s)這個(gè)函數(shù)來設(shè)置控件的固定大小,設(shè)置完成之后控件的大小不會(huì)再被改變,除非我們又調(diào)用setFixedSize(const QSize &s)來設(shè)置。
當(dāng)Layout的SizeConstraint設(shè)置為QLayout::SetFixedSize時(shí),Layout的大小由控件的大小控制,因此控件的不會(huì)被Layout拉伸或者縮小,控件的大小為sizeHint()的值。
以上為我對QLayout的理解,可能會(huì)有理解不對,望大家?guī)臀抑赋觥?/p>
常量 | 描述 |
---|---|
常量 | 描述 |