1.水平布局、垂直布局、网格布局均放置于QGroupBox中。
2.继承QWidget类,在构造函数中调用setLayout()函数,即可完成布局。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWidgets>
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
//, ui(new Ui::MainWindow)
{
//ui->setupUi(this);
//this->setWindowFlags(Qt::FramelessWindowHint);
this->resize(1022,670);
createMenu();
createHorizontalGroupBox();
createGridGroupBox();
createFormGroupBox();
//! [0]
//! [1]
bigEditor = new QTextEdit;
bigEditor->setPlainText(tr("This widget takes up all the remaining space "
"in the top-level layout."));
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
//! [1]
//! [2]
QVBoxLayout *mainLayout = new QVBoxLayout;
//! [2] //! [3]
mainLayout->setMenuBar(menuBar);
//! [3] //! [4]
mainLayout->addWidget(horizontalGroupBox);
mainLayout->addWidget(gridGroupBox);
mainLayout->addWidget(formGroupBox);
mainLayout->addWidget(bigEditor);
mainLayout->addWidget(buttonBox);
//! [4] //! [5]
this->setLayout(mainLayout);
setWindowTitle(tr("Basic Layouts"));
}
//! [6]
void MainWindow::createMenu()
{
menuBar = new QMenuBar;
// menuBar->setParent(this);
fileMenu = new QMenu(tr("&File"));
exitAction = fileMenu->addAction(tr("Exit"));
menuBar->addMenu(fileMenu);
// connect(exitAction, &QAction::triggered, this, &MainWindow::accept);
}
//! [6]
//! [7]
void MainWindow::createHorizontalGroupBox()
{
horizontalGroupBox = new QGroupBox(tr("Horizontal layout"));
QHBoxLayout *layout = new QHBoxLayout;
for (int i = 0; i < NumButtons; ++i) {
buttons[i] = new QPushButton(tr("Button %1").arg(i + 1));
layout->addWidget(buttons[i]);
}
horizontalGroupBox->setLayout(layout);
}
//! [7]
//! [8]
void MainWindow::createGridGroupBox()
{
gridGroupBox = new QGroupBox(tr("Grid layout"));
//! [8]
QGridLayout *layout = new QGridLayout;
//! [9]
for (int i = 0; i < NumGridRows; ++i) {
labels[i] = new QLabel(tr("Line %1:").arg(i + 1));
lineEdits[i] = new QLineEdit;
layout->addWidget(labels[i], i + 1, 0);
layout->addWidget(lineEdits[i], i + 1, 1);
}
//! [9] //! [10]
smallEditor = new QTextEdit;
smallEditor->setPlainText(tr("This widget takes up about two thirds of the "
"grid layout."));
layout->addWidget(smallEditor, 0, 2, 4, 1);
//! [10]
//! [11]
layout->setColumnStretch(1, 10);
layout->setColumnStretch(2, 20);
gridGroupBox->setLayout(layout);
}
//! [11]
//! [12]
void MainWindow::createFormGroupBox()
{
formGroupBox = new QGroupBox(tr("Form layout"));
QFormLayout *layout = new QFormLayout;
layout->addRow(new QLabel(tr("Line 1:")), new QLineEdit);
layout->addRow(new QLabel(tr("Line 2, long text:")), new QComboBox);
layout->addRow(new QLabel(tr("Line 3:")), new QSpinBox);
formGroupBox->setLayout(layout);
}
MainWindow::~MainWindow()
{
delete ui;
}
效果: