Управление окном приложения

Создать окно и управлять им позволяет класс QWidget. Класс QWidget наследует два класса — QObject и QPaintDevice. В свою очередь класс QWidget является базовым классом для всех визуальных компонентов, поэтому любой компонент, не имеющий родителя, обладает своим собственным окном. В этой главе мы рассмотрим методы класса QWidget применительно к окну верхнего уровня, однако следует помнить, что те же самые методы можно применять и к любым компонентам. Например, метод, позволяющий управлять размерами окна, можно использовать и для изменения размеров компонента, имеющего родителя. Тем не менее, некоторые методы имеет смысл использовать только для окон верхнего уровня, например, метод, позволяющий изменить текст в заголовке окна, не имеет смысла использовать в обычных компонентах.

Для создания окна верхнего уровня помимо класса QWidget можно использовать и другие классы, которые являются наследниками класса QWidget, например, класс QFrame (окно с рамкой) или QDialog (диалоговое окно). При использовании класса QDialog окно будет выравниваться по центру экрана (или по центру родительского окна) и иметь только две кнопки в заголовке окна — Справка и Закрыть. Кроме того, можно использовать класс QMainWindow, который представляет главное окно приложения с меню, панелями инструментов и строкой состояния. Использование классов QDialog и QMainWindow имеет свои отличия, которые мы будем рассматривать в отдельных главах.

Создание и отображение окна

Самый простой способ создать пустое окно, приведен в листинге 3.1.

Листинг 3.1. Создание и отображение окна

#include <QApplication>
#include <QWidget>

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QWidget window;
   window.setWindowTitle("Заголовок окна");
   window.resize(350, 70);
   window.show();
   return app.exec();
}

Конструктор класса QWidget имеет следующий формат:

QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

В параметре parent указывается ссылка на родительский компонент. Если параметр не указан или имеет значение nullptr, то компонент будет обладать своим собственным окном. Если в параметре f указан тип окна, то компонент, имея родителя, будет обладать своим собственным окном, но будет привязан к родителю. Это позволяет, например, создать модальное окно, которое будет блокировать только окно родителя, а не все окна приложения. Какие именно значения можно указать в параметре f мы рассмотрим в следующем разделе.

Указать ссылку на родительский компонент уже после создания объекта позволяет метод setParent(). Прототипы метода:

void setParent(QWidget *parent)
void setParent(QWidget *parent, Qt::WindowFlags f)

Получить ссылку на родительской компонент можно с помощью метода parentWidget(). Если компонент не имеет родителя, то метод возвращает нулевой указатель. Прототип метода:

QWidget *parentWidget() const

Для изменения текста в заголовке окна предназначен метод setWindowTitle(). Метод является слотом. Прототип метода:

void setWindowTitle(const QString &)

Пример:

window.setWindowTitle("Текст, отображаемый в заголовке");

После создания окна необходимо вызвать метод show(), чтобы окно и все дочерние компоненты отобразились на экране. Для сокрытия окна предназначен метод hide(). Методы show() и hide() являются слотами. Для отображения и сокрытия компонентов можно также воспользоваться методом setVisible(<Флаг>). Метод является слотом. Прототип метода:

virtual void setVisible(bool visible)

Если в параметре указано значение true, то компонент будет отображен, а если значение false, то компонент будет скрыт. Пример отображения окна и всех дочерних компонентов:

window.setVisible(true);

Проверить, видим компонент в настоящее время или нет, позволяет метод isVisible(). Метод возвращает true, если компонент видим, и false — в противном случае. Кроме того, можно воспользоваться методом isHidden(). Метод возвращает true, если компонент скрыт, и false — в противном случае. Прототипы методов:

bool isVisible() const
bool isHidden() const

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов