Skip to content

QLayout

Введение в QLayout

QLayout — это базовый класс в Qt для управления размещением виджетов в окне. С помощью QLayout можно легко организовывать и упорядочивать виджеты, обеспечивая адаптивность и удобство пользовательского интерфейса. Существует несколько типов макетов, которые позволяют создавать гибкие и динамичные интерфейсы.

Основные типы макетов

QHBoxLayout

QHBoxLayout располагает виджеты по горизонтали, выравнивая их в одну линию.

cpp
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
layout->addWidget(new QPushButton("Button 3"));

QVBoxLayout

QVBoxLayout располагает виджеты по вертикали, выстраивая их в колонку.

cpp
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
layout->addWidget(new QPushButton("Button 3"));

QGridLayout

QGridLayout организует виджеты в виде таблицы, где каждый виджет занимает одну или несколько ячеек.

cpp
QGridLayout *layout = new QGridLayout;
layout->addWidget(new QPushButton("Button 1"), 0, 0);
layout->addWidget(new QPushButton("Button 2"), 0, 1);
layout->addWidget(new QPushButton("Button 3"), 1, 0, 1, 2); // занимает две ячейки по ширине

QFormLayout

QFormLayout удобно использовать для создания форм, где виджеты располагаются парами "метка-виджет".

cpp
QFormLayout *layout = new QFormLayout;
layout->addRow(new QLabel("Name:"), new QLineEdit);
layout->addRow(new QLabel("Age:"), new QSpinBox);

Пример использования

Ниже представлен пример использования QVBoxLayout для создания вертикального макета:

cpp
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout;

    layout->addWidget(new QPushButton("Button 1"));
    layout->addWidget(new QPushButton("Button 2"));
    layout->addWidget(new QPushButton("Button 3"));

    window.setLayout(layout);
    window.show();

    return app.exec();
}

В этом примере создается вертикальный макет с тремя кнопками, которые располагаются друг под другом.

Заключение

QLayout предоставляет мощные инструменты для управления размещением виджетов в Qt-приложениях. Используя различные типы макетов, можно создавать сложные и адаптивные интерфейсы, обеспечивая удобство использования и эстетичный внешний вид.

Содержание доступно по лицензии MIT