Архив метки: qt

Qt для начинающих. Урок 3. Использование QMainWindow. Комбинации разных менеджеров компоновки

Вернуться к общему содержанию "Qt для начинающих".

    Содержание

  1. Проект с главным окном на основе базового класса QMainWindow
  2. Использование менеджеров компоновки QVBoxLayout и QHBoxLayout

Проект с главным окном на основе базового класса QMainWindow

В уроке 1, в разделе "Пример создания шаблона GUI-приложения из QtCreator", мы создали заготовку для GUI-приложения главное окно которого было основано на базовом классе QWidget. Здесь мы будем рассматривать аналогичную заготовку, в которой класс главного окна будет наследоваться не от QWidget, а от QMainWindow. Для этого, необходимо, на четвертой странице мастера создания нового проекта выбрать в качестве базового класса главного окна класс QMainWindow.

Класс QMainWindow отличается от QWidget тем, что уже содержит в себе обобщенные средства для создания на их основе главных окон приложения. Так, если QWidget только содержит в себе средства для установки какого-нибудь менеджера компоновки, то QMainWindow уже имеет в себе менеджер компоновки, в который можно добавить объекты классов QToolBars (панели инструментов), QDockWidgets (стыкуемые окна), QMenuBar (строка меню) и QStatusBar (строка статуса). Кроме этого, компоновка включает центральную область, которая может быть занята каким-либо виджетом. При создании приложений с однодокументным интерфейсом (SDI), центральную область занимает обычный виджет в котором делается разметка в согласии с целями приложения. Для приложения многодокументного интерфейса (MDI) центральный виджет занимает какой-нибудь объект управления дочерними окнами, например, объект класса QMdiArea. Ниже приведен рисунок из справочного руководства по Qt, на котором показана разметка, реализованая в классе QMainWindow.

Текущая цель урока заключается в адаптации нашей начальной практики разработки главного окна приложения под использование класса QMainWindow. Прежде мы уже использовали создание интерьера формы в специальном методе createFormEnvironment(). Это правильная практика разделения функционала, которая будет поддерживаться в традициях данного руководства. В начале этого раздела была сделана заготовка приложения с главным окном на основе класса QMainWindow. Представим снимки измененных файлов главного окна приложения, которые содержат заготовку для метода createFormEnvironment().

Файл mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

class MainWindow : public QMainWindow
{
    Q_OBJECT    
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    void createFormInterior();
};

#endif // MAINWINDOW_H

Файл mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("Something Title"));

    createFormInterior();
}

MainWindow::~MainWindow()
{   
}

void MainWindow::createFormInterior()
{
    QWidget * wgt = new QWidget(this);
    setCentralWidget(wgt);

    // Далее здесь следует создать менеджер компоновки
    // для центрального виджета wgt, внутри которого
    // реализовать требуемый интерьер формы.
}

В файле mainwindow.h мы лишь объявили в приватной области видимости метод создания интерьера. Этого требуют формальные правила ООП в C++. Интереснее изменения в файле mainwindow.cpp. Рассмотрим, чем отличается реализация метода создания интерьера для окон на основе классов QWidget и QMainWindow.

Выше уже говорилось, что внутри графической области класса QMainWindow реализована некоторая разметка, в которой определена центральная область для установки пользовательских виджетов. Наша заготовка для createFormInterior() как раз заполняет эту область специально созданным для этого виджетом. При создании центрального виджета, его владельцем объявлен класс главного окна, следовательно наш центральный виджет будет уничтожен автоматически при уничтожении главного окна приложения. Для установки созданного виджета в центр разметки объекта класса QMainWindow используется специальный метод setCentralWidget(). Дальнейшее создание интерьера должно строиться на этом центральном виджете. При использовании менеджеров компоновки следует создать центральный менеджер компоновки, связать его с центральным виджетом и уложить в его ячейки требуемые элементы интерьера, возможно, через использование вложенных компоновщиков.

Использование менеджеров компоновки QVBoxLayout и QHBoxLayout