QLayout
Введение в QLayout
QLayout — это базовый класс в Qt для управления размещением виджетов в окне. С помощью QLayout можно легко организовывать и упорядочивать виджеты, обеспечивая адаптивность и удобство пользовательского интерфейса. Существует несколько типов макетов, которые позволяют создавать гибкие и динамичные интерфейсы.
Основные типы макетов
QHBoxLayout
QHBoxLayout располагает виджеты по горизонтали, выравнивая их в одну линию.
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
layout->addWidget(new QPushButton("Button 3"));
QVBoxLayout
QVBoxLayout располагает виджеты по вертикали, выстраивая их в колонку.
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(new QPushButton("Button 1"));
layout->addWidget(new QPushButton("Button 2"));
layout->addWidget(new QPushButton("Button 3"));
QGridLayout
QGridLayout организует виджеты в виде таблицы, где каждый виджет занимает одну или несколько ячеек.
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 удобно использовать для создания форм, где виджеты располагаются парами "метка-виджет".
QFormLayout *layout = new QFormLayout;
layout->addRow(new QLabel("Name:"), new QLineEdit);
layout->addRow(new QLabel("Age:"), new QSpinBox);
Пример использования
Ниже представлен пример использования QVBoxLayout для создания вертикального макета:
#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-приложениях. Используя различные типы макетов, можно создавать сложные и адаптивные интерфейсы, обеспечивая удобство использования и эстетичный внешний вид.