設計軟件中各個部件的位置排列,有兩種方法:
1.設置widget的在父窗體中的坐標和大小
widget->move(x,y);
widget->resize(width,height);
//widget->setGeometry(QRect(x,y,width,height));
什么時候用:不想被布局約束,對這種控件可控制時
例如下面的可活動按鈕

缺點:在遇到很多個部件時,一個個算坐標會很麻煩
部件不自動隨父窗體的變化而變化(這里要重寫resizeEvent事件算變化比例建立父子窗體之間的聯系,而布局很容易做到)
2.布局管理Layout(可控制的部件不要使用布局中,一旦改變會影響到整體布局)
經常要用到的三個布局部件
QHBoxLayout水平布局
QVBoxLayout垂直布局
QGridLayout表格布局
————————————————————————————————
QHBoxLayout和QVBoxLayout用法相同
基本:
vlayout->addWidget(w1);
vlayout->addWidget(w2);
……
——————————————————————————————————
QGridLayout用法
layout->addWidget(widget,row,column,rowSpan,columnSpan);
layout->addLayout(layout,row,column,rowSpan,columnSpan);
(row,column):控件占據左上角的單元格位置
rowSpan:控件占據的行數
columnSpan:控件占據的列數(不寫默認為1)
——————————————————————————————
控件隨窗體伸縮
將布局與主窗體建立聯系
layout=new QHBoxLayout(this);
或者this->setLayout(layout);
——————————————————————————————
layout->addStretch();可伸縮的空間
layout->setAlignment(Qt::AlignHCenter);//布局內控件水平居中
layout->setSpacing(10);//控件間隔為10
layout->setMargin(10);//頁邊距為10
Qt設計器中spacer控件
以上在對控件位置調整時常用
——————————————————————————————————
結合SizePolicy屬性控制布局管理中的控件的尺寸自適應方式
也就是控件隨主窗體伸縮方式(可自行增大或縮?。?/span>
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收縮
Fixed:不能放大或縮小
Minimum:不能小于sizeHint尺寸,可放大(若設置了最大尺寸)
Maximum:不能放大,可縮小到允許的最小尺寸(若setMinimumSize(10,10)只能縮小到(10,10))
Preferred:控件的sizeHint是他的Hint,可以放大或縮小
————————————————————————————————————————————
比例因子的使用
例:布局中有左右兩控件,右邊比左邊水平伸縮2倍
sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(0);
left->setSizePolicy(sizePolicy);
sizePolicy.setHorizontalStretch(2);
sizePolicy.setVerticalStretch(0);
left->setSizePolicy(sizePolicy);
水平伸展比例(1,2)
垂直伸展比例(0,0)
——————————————————————————————————————————————————
布局顧名思義是對控件的位置的整體規劃,每個控件之間都存在著位置關系,所以改變控件(移動、關閉)會破壞布局
——————————————————————————————————————————————————
結論:兩種方法結合使用,應該可以應對大部分界面布局
本人是菜鳥,實踐不多,如有錯誤歡迎指正
—————————————————————————————————————————————————
上述代碼是為了理解布局使用,Qt設計器可實現