Разработка/Руководства/Введение в Qt4 на Ruby/Глава 3
Серия примеров | Введение в программирование на Qt®4 на языке Ruby |
Необходимо знать | Пример 2: Выход по нажатию |
Следующий пример | Пример 4: Давайте создадим свой виджет |
Литература | нет |
Иерархия виджетов
Файлы:
Обзор
Этот пример показывает, как можно создать родительский и дочерний виджеты.
Мы максимально упростим задачу и создадим единственный родительский виджет и только один дочерний ему виджет.
require 'Qt4'
app = Qt::Application.new(ARGV)
window = Qt::Widget.new()
window.resize(200, 120)
quit = Qt::PushButton.new('Quit', window)
quit.font = Qt::Font.new('Times', 18, Qt::Font::Bold)
quit.setGeometry(10, 40, 180, 40)
Qt::Object.connect(quit, SIGNAL('clicked()'), app, SLOT('quit()'))
window.show()
app.exec()
Построчный обзор программы
window = Qt::Widget.new()
Здесь мы создаём объект простого виджета. Qt::Widget — базовый класс для всех объектов интерфейса пользователя. Виджет — это неделимая единица интерфейса. Он получает события от оконной системы при использовании мыши, клавиатуры и других действиях, а также рисует себя на экране. Область виджета на экране может быть обрезана родительским виджетом или перекрыта виджетами, расположенными поверх него.
Виджет, который не встроен в родительский виджет (как в нашем примере) называется окном. Обычно окна имеют рамку и соответствующий элемент в панели задач, которые создаются оконной системой. Виджет, не имеющий родительского виджета, всегда является свободным окном. Его исходное положение на экране выбирается оконной системой.
window.resize(200, 120)
Мы устанавливаем ширину окна равной 200 пикселам, а высоту равной 120 пикселам.
quit = Qt::PushButton.new('Quit', window)
Создание дочернего виджета. При создании объекта Qt::PushButton в качестве родительского виджет выбирается window. Дочерний виджет всегда показывается внутри родительского, если что-то не умещается в границы родительского виджета, это обрезается. По умолчанию дочерний виджет расположен в левом верхнем углу родительского и имеет относительные координаты (0, 0).
quit.setGeometry(10, 40, 180, 40)
Метод Qt::Widget::setGeometry() принимает 4 аргумента: первые 2 аргумента — координаты левого верхнего угла кнопки относительно родительского окна, другие 2 аргумента — ширина и высота кнопки соответственно. В результате такого вызова мы получаем кнопку, занимающую прямоугольник с углами в точках (10, 40) и (190, 80).
window.show()
При вызове метода show() у родительского виджета, он сам вызывает show() для всех своих дочерних виджетов (кроме тех, которые были явно скрыты вызовом Qt::Widget::hide()).
Запуск приложения
Кнопка уже не занимает всё окно, теперь она расположена в координатах (10, 40) и имеет размер (180, 40). Это было достигнуто вызовом Qt::Widget::setGeometry().
Упражнения
Попробуйте изменить размер окна. Как изменилась кнопка? Что произойдёт с высотой кнопки, если увеличить шрифт? Что произойдёт, если попробовать сильно уменьшить размер окна?