一、sizepolicy類型
Qt的sizepolicy 是一個布局中重要的概念,它定義了widget在給定空間下的布局行為,主要分為三種類型:
Fixed:指定固定的大小(高度或寬度或兩者都固定),並不會隨着parent widget的大小變化而變化。
Minimum:指定一個最小的大小,如果有足夠的空間,widget將盡量擴大到其最大限度。
Maximum:指定一個最大的大小,如果空間不夠,widget會縮小到最大限度。
二、sizepolicy中prefer
在每種sizepolicy類型中,都有一個prefer屬性,表示widget首選的尺寸,這意味着當widget填充parent widget時,它優先增長到prefer尺寸,而不是膨脹到最大的sizepolicy允許它達到的尺寸。
例如,如果widget強製為Fixed類型,並將prefer設置為(100, 100)。那麼當parent widget提供一個寬為150,高為150的區域時,該widget將大小為100×100(而不是150×150)。當有一個更小的區域,widget將會被裁剪。
三、sizepolicy 水平伸展
sizepolicy中的horizontalStretch和verticalStretch屬性可用於限制widget的操作。horizontalStretch控制widget在水平方向上的伸展程度,verticalStretch控制widget在豎直方向上的伸展程度。兩者都是均勻的,即在水平和豎直中都同樣地為parent分配剩餘的空間。
QHBoxLayout *layout = new QHBoxLayout; layout->setStretchFactor(widget1, 1); layout->setStretchFactor(widget2, 3);
例如,此代碼中,widget1和widget2位於同一個布局中。由於widget2的伸展因子比widget1大3倍,widget2將在widget1之後佔用更多的空間。如果widget2與widget1具有相同的伸展因子,則兩個widget將平均佔用剩餘的空間。
四、qt sizepolicy選取
QSizePolicy是在QWidget存儲中的對象,用於為widget設置sizepolicy的各個屬性。它由四個數值構成,分別指定四個屬性(horizontalPolicy, verticalPolicy, horizontalStretch, verticalStretch)。儘管這四個屬性可以單獨進行設置,但通常是使用QSizePolicy的工廠函數進行設置。
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); widget->setSizePolicy(sizePolicy);
例如,這段代碼中,sizePolicy的水平和豎直方向上的policy都是Preferred,並且水平和豎直方向上的伸展因子都為0,表示保持其固有大小。
五、sizepolicy在布局中的應用
最常見的布局是QHBoxLayout和QVBoxLayout。在這些布局中,子widget的sizepolicy影響了子widget在布局中的佔位大小和將如何調整內容。通過在父布局設置不同的伸展因子和大小策略(min/max/fixed),可控制子布局中子widget的相對大小。
QHBoxLayout *layout = new QHBoxLayout; QPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2"); QPushButton *button3 = new QPushButton("Button 3"); button1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); layout->addWidget(button1); layout->addWidget(button2); layout->addWidget(button3);
例如,此代碼中,QHBoxLayout包含三個QPushButtons。每個按鈕的sizepolicy設置為Expanding,這意味着當該布局被調整大小時,三個button都會平分其水平空間。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257693.html