Development/Tutorials/Qt4 Ruby Tutorial/Chapter 3/ru: Difference between revisions
Aspotashev (talk | contribs) Created page with "=== Обзор ===" |
Updating to match new version of source page |
||
(14 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
{{TutorialBrowser/ru| | {{TutorialBrowser/ru| | ||
Line 18: | Line 16: | ||
=== Обзор === | === Обзор === | ||
Этот пример показывает, как можно создать родительский и дочерний виджеты. | |||
Мы максимально упростим задачу и создадим единственный родительский виджет и только один дочерний ему виджет. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 39: | Line 37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Построчный обзор программы === | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
window = Qt::Widget.new() | window = Qt::Widget.new() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Здесь мы создаём объект простого виджета. [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] — базовый класс для всех объектов интерфейса пользователя. Виджет — это неделимая единица интерфейса. Он получает события от оконной системы при использовании мыши, клавиатуры и других действиях, а также рисует себя на экране. Область виджета на экране может быть обрезана родительским виджетом или перекрыта виджетами, расположенными поверх него. | |||
Виджет, который не встроен в родительский виджет (как в нашем примере) называется окном. Обычно окна имеют рамку и соответствующий элемент в панели задач, которые создаются оконной системой. Виджет, не имеющий родительского виджета, всегда является свободным окном. Его исходное положение на экране выбирается оконной системой. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 52: | Line 50: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Мы устанавливаем ширину окна равной 200 пикселам, а высоту равной 120 пикселам. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 58: | Line 56: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Создание дочернего виджета. При создании объекта [http://doc.qt.nokia.com/latest/qpushbutton.html Qt::PushButton] в качестве родительского виджет выбирается '''<tt>window</tt>'''. Дочерний виджет всегда показывается внутри родительского, если что-то не умещается в границы родительского виджета, это обрезается. По умолчанию дочерний виджет расположен в левом верхнем углу родительского и имеет относительные координаты (0, 0). | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 64: | Line 62: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Метод [http://doc.qt.nokia.com/latest/qwidget.html#setgeometry Qt::Widget::setGeometry()] принимает 4 аргумента: первые 2 аргумента — координаты левого верхнего угла кнопки относительно родительского окна, другие 2 аргумента — ширина и высота кнопки соответственно. В результате такого вызова мы получаем кнопку, занимающую прямоугольник с углами в точках (10, 40) и (190, 80). | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 70: | Line 68: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
При вызове метода '''show()''' у родительского виджета, он сам вызывает '''show()''' для всех своих дочерних виджетов (кроме тех, которые были явно скрыты вызовом [http://doc.qt.nokia.com/latest/qwidget.html#hide Qt::Widget::hide()]). | |||
=== | === Запуск приложения === | ||
Кнопка уже не занимает всё окно, теперь она расположена в координатах (10, 40) и имеет размер (180, 40). Это было достигнуто вызовом [http://doc.qt.nokia.com/latest/qwidget.html#geometry-prop Qt::Widget::setGeometry()]. | |||
=== | === Упражнения === | ||
Попробуйте изменить размер окна. Как изменилась кнопка? Что произойдёт с высотой кнопки, если увеличить шрифт? Что произойдёт, если попробовать сильно уменьшить размер окна? | |||
[[Category:Ruby]] | [[Category:Ruby/ru]] |
Latest revision as of 09:11, 14 July 2012
Серия примеров | Введение в программирование на 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().
Упражнения
Попробуйте изменить размер окна. Как изменилась кнопка? Что произойдёт с высотой кнопки, если увеличить шрифт? Что произойдёт, если попробовать сильно уменьшить размер окна?