Разработка/Руководства/Введение в Qt4 на Ruby/Глава 3

Jump to: navigation, search
This page is a translated version of a page Development/Tutorials/Qt4 Ruby Tutorial/Chapter 3 and the translation is 100% complete.

Other languages:English 100% • ‎Finnish 100% • ‎Russian 100%
Иерархия виджетов
Серия примеров   Введение в программирование на Qt®4 на языке Ruby
Необходимо знать   Пример 2: Выход по нажатию
Следующий пример   Пример 4: Давайте создадим свой виджет
Литература   нет

Contents

Иерархия виджетов

Qt4 Ruby Tutorial Screenshot 3.png

Файлы:

Обзор

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

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

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().

Упражнения

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


This page was last modified on 14 July 2012, at 10:11. This page has been accessed 1,941 times. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal