**- QHBoxLayout 水平布局 - QVBoxLayout 垂直布局 - QGridLayout 網格布局 - QStackedLayout 把子控件進行分組或者分頁,一次只顯示一組或者一頁,隱藏其他組或者頁上的控件。**
布局管理中結合控件的sizePolicy屬性,進行調整
結合控件的SizePolicy屬性,來控制布局管理中的控件的尺寸自適應方式。
控件的sizePolicy說明控件在布局管理中的縮放方式。Qt提供的控件都有一個合理的缺省sizePolicy,但是這個缺省值有時不能適合所有的布局,開發人員經常需要改變窗體上的某些控件的sizePolicy。一個QSizePolicy的所有變量對水平方向和垂直方向都適用。下面列舉了一些最長用的值:
A. Fixed:控件不能放大或者縮小,控件的大小就是它的sizeHint。
B. Minimum:控件的sizeHint為控件的最小尺寸??丶荒苄∮谶@個sizeHint,但是可以
放大。
C. Maximum:控件的sizeHint為控件的最大尺寸,控件不能放大,但是可以縮小到它的最小
的允許尺寸。
D. PReferred:控件的sizeHint是它的sizeHint,但是可以放大或者縮小
E. Expandint:控件可以自行增大或者縮小
注:sizeHint(布局管理中的控件默認尺寸,如果控件不在布局管理中就為無效的值)
摘自: http://www.cnblogs.com/QQ78292959/archive/2012/08/13/2637209.html http://blog.csdn.net/lastsoup/article/details/7028243
Demo1。 6個button(編號1~6)水平放置。其中 1,2 之間間隔2個像素;3,4之間間隔10個像素 ;5,6之間間隔20個像素。
解決方式: 每兩個放在一個QHBoxLayout中。然后三個loyout 在放到一個總的mainLayout中。
leftLayout->addWidget(button1); leftLayout->addWidget(button2); leftLayout->setSpacing(2); midlayout->addWidget(button3); midlayout->addWidget(button4); midlayout->setSpacing(10); rightlayout->addWidget(button5); rightlayout->addWidget(button6); rightlayout->setSpacing(20); mainLayout->addLayout(leftLayout); mainLayout->addLayout(midlayout); mainLayout->addLayout(rightlayout); this->setLayout(mainLayout);這樣就可以了。其中setSpacing() 設置了布局中 控件之間的距離。 但是 如果布局之間有三個按鈕(A,B,C),其中A,B間隔2像素;B,C間隔10像素,這就比較尷尬了。 其實可以使用 addSpacing(int )
方法
補充:
bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment) //設置對齊方式void QLayout::setMargin(int margin) //頁邊距Demo2 如果button有MinimumSize,導致一行無法容納下所有的buttons 例如 我們每點擊一次就會加一個button,如何讓添加的button自動換行。 可以使用QGridLayout 。
layout = new QGridLayout(this); button = new QPushButton(this); layout->setHorizontalSpacing(2); layout->setVerticalSpacing(10); button->setText(QStringLiteral("新建")); button->move(0,0); QObject::connect(button,SIGNAL(clicked(bool)),this,SLOT(on_button_clicked(bool)));void Widget::on_button_clicked(bool){ QPushButton * button = new QPushButton; button->setText(QStringLiteral("button")); button->setMaximumSize(150,50); button->setMinimumSize(150,50); int row = countButton/numCol; int col = countButton%numCol; layout->addWidget(button,row,col); ++countButton;}這樣每點擊新建都會給loyout加一個button,可以計算位置放置。 如果依然每兩個之間固定間隔,則可以結合Demo1。
新聞熱點
疑難解答