Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

[Предыдущий: Урок 2] [Учебное пособие] [Следующий: Урок 4]

Урок 3 - Родственные связи

Файлы:

Снимок экрана к Уроку 3

Следующий пример продемонстрирует нам создание родительского виджета и его потомков.

Мы создадим простой пример и рассмотрим создание одного родительского виджета с единственным потомком.

 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 **
 ****************************************************************************/

 #include <QApplication>
 #include <QFont>
 #include <QPushButton>
 #include <QWidget>

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

     QWidget window;
     window.resize(200, 120);

     QPushButton quit("Quit", &window);
     quit.setFont(QFont("Times", 18, QFont::Bold));
     quit.setGeometry(10, 40, 180, 40);
     QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

     window.show();
     return app.exec();
 }

Разберем программу строка за строкой

 #include <QWidget>

Мы добавили подключение определения класса <QWidget>, который является базовым классом всех виджетов.

     QWidget window;

В этой строчке мы просто создаем экземпляр объекта виджета. Класс QWidget является базовым классом для всех объектов пользовательского интерфейса. Виджет - это элементарный объект пользовательского интерфейса: Он получает данные от клавиатуры, мышки и другие события от оконной системы и рисует свое изображение на экране. Виджет ограничен своим родителем и другими виджетами, расположенными перед ним.

Виджет, который не встроен в родительский виджет, как например в нашем случае, называют окном. Обычно, окна имеют собственную рамку и эмблему для входа через панель задач, обеспечиваемые системой окна. Виджет без родительского окна - всегда независимое окно. Его расположением на экране при старте управляет оконная система.

     window.resize(200, 120);

В этой строчке мы устанавливаем ширину окна равной 200 пикселям и высоту равной 120 пикселям.

     QPushButton quit("Quit", &window);

Ребёнок родился. Этот экземпляр объекта QPushButton создается с родительским виджетом (window). Виджет, который является потомком другого виджета, всегда отображается в пределах окна родительского виджета. При отображении на экране он ограничен границами родительского виджета. По умолчанию, если не задать местоположение виджета, он будет размещен в верхнем левом углу родительского виджета с координатами (0, 0).

     quit.setGeometry(10, 40, 180, 40);

Функция QWidget::setGeometry() принимает 4 параметра: Первые два параметра - это координаты x и y верхнего левого угла. Координаты указываются относительно родительского виджета. Последние два параметра - ширина и высота кнопки. Результатом этой команды будет кнопка, левый верхний угол которой расположен в точке (10, 40) а правый нижний угол - в точке (190, 80).

     window.show();

Когда родительский виджет становится видимым, это делает видимыми и все его дочерние виджеты (за исключением тех, которые с использованием метода QWidget::hide() будут скрыты явно).

Запуск приложения

Кнопка не будет теперь заполнять все окно. Вместо этого верхний левый угол кнопки будет располагаться внутри окна в точке (10, 40) и иметь размеры по ширине 180 и по высоте 40, которые мы установили при вызове метода QWidget::setGeometry().

Домашнее задание

Попробуйте изменить размер окна. Что при этом произойдет с кнопкой? Что произойдет с высотой кнопки, если вы увеличите размер шрифта на кнопке? Что произойдет, если сильно уменьшить размер окна?

[Предыдущий: Урок 2] [Учебное пособие] [Следующий: Урок 4]


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5