PLLUG C++/Qt Roadmap Book
  • Вступ
  • Найважливіший розділ у цій книжці
    • Кілька критично важливих порад
    • Встановлення середовища та початок роботи
    • Підготовка до роботи. Командний рядок.
      • Встановлення та налаштування суперконсолі (тільки на Windows)
      • Cheatsheet: Робота з командним рядком
    • Компіляція та запуск першої програми
      • Найменьша програма мовою С++
      • Компіляція програми: як це працює
      • Починаємо програмувати
    • Базова робота з Git та створення власного репозиторію
      • Підготовка до роботи
      • Створюємо репозиторій та заливаємо на GitHub
      • Cheatsheet: Простий алгоритм для роботи з системою контролю версій (одна гілка, один розробник)
      • Працюємо з Git правильно
  • Мова С++ - швидкий вступ та обрані теми
    • Змінні. Деякі з основних типів та їх застосування.
      • Типи int та double
      • Тип bool
      • Тип char
      • Тип std::string
      • Тип std::vector
      • Тип std::array
    • Ключове слово const
  • Середовище розробки QtCreator
    • Налаштування та підготовка до роботи
      • Налаштування інструментаріїв
    • Довідка та ресурси
    • Гарячі клавіші
    • Робота з проектами у QtCreator
      • Файли проекту
      • Основні змінні, які беруть участь у описі проекту
      • Компіляція проекту Qt
      • Очистка проекту
  • Абстрактні типи даних та керування памяттю
    • Абстрактні типи даних
      • Об'єкти та класи. Абстракція.
      • Поля та методи класу
      • Успадкування
      • Віртуальні методи та поліморфізм
    • Вказівники та пам'ять
      • Адреса
      • Вказівники
      • Вказівники: примітивна демонстрація програми у пам'яті
      • Час зберігання об'єкту
  • Знайомство з Qt5
    • Огляд Qt5
      • Ласкаво просимо у світ Qt
      • Огляд можливостей Qt 5
      • Ліцензування Qt
      • Короткий огляд історії Qt
      • “Екосистема” Qt
    • Створення графічного інтерфейсу засобами Qt
      • Віджети (Widgets)
      • Компонування (Layouts)
      • Сигнально-слотові з'єднання
      • Створення сигналів (signals) та слотів (slots)
      • Підсумок: сигнально-слотові з'єднання
      • Коротко про елементи графічного інтерфейсу та їх використання
  • Cheatsheets
  • Demos
  • Missions
    • Mission 1: Досліджуємо Git та командний рядок
    • Mission 2: Консольна гра
    • Mission 3: MazeGame
    • Mission 4: Створюємо абстрактний тип даних
Powered by GitBook
On this page
  • Як працюють компонування
  • Вертикальне (QVBoxLayout) та горизонтальне (QHBoxLayout) компонування.
  1. Знайомство з Qt5
  2. Створення графічного інтерфейсу засобами Qt

Компонування (Layouts)

Для того. щоб розумно розмістити віджети на формі, необхідно врахувати ряд деталей:

  • розмір сусідніх віджетів;

  • візуальні компоненти можуть динамічно змінювати розмір, приховуватись чи з'являтись внаслідок

  • роботи логіки програми;

  • форма, у якій розміщують віджети, може динамічно змінювати розмір під час роботи програми (коли користувач змінює розмір вікна чи розкриває його на весь екран);

  • часто буває потрібно розтягнути візуальну компоненту таким чином, щоб вона займала увесь простір форми, або ж щоб кілька компонентів займали простір форми пропорційно ( у відповідних пропорціях 1:1, 1:2, 3:5 тощо);

  • часто буває потрібно розмістити віджети або групи віджетів вертикально чи горизонтально на формі, тощо.

Зрозуміло, що така логіка є досить складною для реалізації при повсякденному створенні інтерфейсів користувача різної структури та складності. На щастя, в арсеналі Qt є досить потужний інструмент для впорядковування віджетів на формі — компонування.

Як працюють компонування

Компонування дає змогу впорядкувати розміщення компонент, у той же час залишаючи інтерфейс гнучким до змін, таких як зміна розміру чи зміна кількості елементів на формі. Також компонування може забезпечувати адекватну зміну розміру самого віджета у відповідь на зміни у його наповненні чи вигляді.

Компонування не належать до віджетів, не успадковують від QWidget та є невидимі на формі. Вони лише керують розміром та розміщенням їх вмісту. Найчастіше використовують три основних компонування:

  • вертикальне компонування (клас QVBoxLayout);

  • горизонтальне компонування (клас QHBoxLayout);

  • компонування сіткою (клас QGridLayout);

Вертикальне (QVBoxLayout) та горизонтальне (QHBoxLayout) компонування.

Для того щоб продемонструвати роботу з компонуваннями, ми створимо новий приклад, додамо кілька елементів та зробимо так, щоб розміщення елементів було пропорційне та відповідало зміні розмірів вікна. Спробуємо створити такий інтерфейс:

  • мітки та поля вводу розмістимо горизонтально в одному рядку;

  • створимо два таких рядка з мітками та полями;

  • додамо ще один рядок з двома кнопками горизонтально, вирівняними за правим краєм вікна.

Створимо проект LayoutExample. Для цього скористаємося майстром нових проектів. Виберемо у списку Qt Gui Application. Задамо назву для проекту та налаштуємо клас головного вікна: задамо батьківський клас (у випадаючому списку Base Class встановимо QWidget) та знімемо прапорець для автоматичної генерації файла форми (Generate Form).

Малюнок 3.13 Створення програми з графічним інтерфейсом користувача.

Відкриємо файл mainwindow.cpp та змінимо код конструктора вікна:

#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    // Перший горизонтальний рядок
    // Початковий текст у полі вводу
    QLineEdit *lLineEdit = new QLineEdit("Text 1");
    // Задаємо текст
    // & - означає комбінацію клавіш
    // для активації віджета
    QLabel *lLabel = new QLabel("Line Edit &1");
    // Задаємо віджет до якого буде пермикатися
    // фокус вводу при натисканні Alt+1
    lLabel->setBuddy(lLineEdit);
    // Розташовуємо поле вводу та
    // мітку у одному рядку.
    QHBoxLayout *lHBoxLayout = new QHBoxLayout;
    lHBoxLayout->addWidget(lLabel);
    lHBoxLayout->addWidget(lLineEdit);
    // Другий горизонтальний рядок
    QLineEdit *lLineEdit2 = new QLineEdit("Text 2");
    QLabel *lLabel2 = new QLabel("Line Edit &2");
    lLabel2->setBuddy(lLineEdit2);
    QHBoxLayout *lHBoxLayout2 = new QHBoxLayout;
    lHBoxLayout2->addWidget(lLabel2);
    lHBoxLayout2->addWidget(lLineEdit2);
    // Третій ряд віджетів з кнопками
    QPushButton *lPushButtonOk = new QPushButton("&Ok");
    QPushButton *lPushButtonCancel = new QPushButton("&Cancel");
    QHBoxLayout *lHBoxLayout3 = new QHBoxLayout;
    // Додаємо елемент-розтягнення
    // він займе весь можливий вільний простір
    // та "притисне" кнопки до краю
    lHBoxLayout3->addStretch();
    lHBoxLayout3->addWidget(lPushButtonOk);
    lHBoxLayout3->addWidget(lPushButtonCancel);
    // Додаємо компонування вертикально у колонку
    QVBoxLayout *lVBoxLayout = new QVBoxLayout;
    lVBoxLayout->addLayout(lHBoxLayout);
    lVBoxLayout->addLayout(lHBoxLayout2);
    lVBoxLayout->addLayout(lHBoxLayout3);
    // Задаємо компонування для вікна
    setLayout(lVBoxLayout);
}

Після запуску програми отримаємо головне вікно з розміщеними у компонуваннях віджетами.

Малюнок Приклад використання горизонтального та вертикального компонувань.

PreviousВіджети (Widgets)NextСигнально-слотові з'єднання

Last updated 7 years ago