QHBoxLayout、QVBoxLayout

絕對定位和布局定位

Qt 提供了兩種元件定位機制:

  1. 絕對定位:給元件的坐標和長寬值,比如用setGeometry()函式,但是如果用戶改變了窗口大小,採用絕對定位的元件不會有響應。
  2. 布局定位:能自動排列窗口中的元件,有效的使用空間,採用布局定位彈性較佳,常使用的布局管理有QHBoxLayout、QVBoxLayout、QGridLayout等,分別是水平、垂直、網格排列布局,常用的方法有addWidget()和addLayout(),分別為增加元件和增加布局管理員。

這邊示範如何使用QHBoxLayout,QHBoxLayout、QVBoxLayout兩者使用方法類似,可用setMargin()調整布局管理員和外圍的距離,setSpacing()調整元件間的距離,addStretch()增加空白佔位符,做出偏右或偏左的效果。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QHBoxLayout>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
private:
    QPushButton *okBtn;
    QPushButton *cancelBtn;
    QHBoxLayout *btnLayout;
};

#endif 

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    :QDialog(parent)
{
    setWindowTitle(tr("按鍵組"));
    btnLayout = new QHBoxLayout(this);  //需設定父元件
    okBtn = new QPushButton(tr("確定"));
    cancelBtn = new QPushButton(tr("取消"));
    btnLayout->addStretch();          //在插入按鈕前增加一個佔位符。
    btnLayout->addWidget(okBtn);
    btnLayout->addWidget(cancelBtn);
    btnLayout->setMargin(5);          //設定邊距為5
    btnLayout->setSpacing(5);         //設定元件間的距離為5
}
  • 佔位符可以讓按鈕向右或向左靠齊,窗口大小改變時按鈕仍大小不變,且同樣為向右或向左靠齊。

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

QHBoxLayout