Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06/ru: Difference between revisions
Aspotashev (talk | contribs) (Created page with "Этот пример показывает, как можно упаковать 2 виджета в новый компонент и как можно удобно работа...") |
(Updating to match new version of source page) |
||
(15 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
{{TutorialBrowser/ru| | {{TutorialBrowser/ru| | ||
Line 70: | Line 70: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Построчный обзор программы === | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class LCDRange < Qt::Widget | class LCDRange < Qt::Widget | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Виджет '''<tt>LCDRange</tt>''' не имеет никакого программного интерфейса (API). У него есть только конструктор. Такой виджет не очень полезен, поэтому позже мы добавим в него больше возможностей. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 94: | Line 94: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Этот код взят из конструктора класса '''<tt>MyWidget</tt>''' из [[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|5-й главы]]. Единственное отличие в том, что кнопка <strong>Quit</strong> была выброшена. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 100: | Line 100: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''<tt>MyWidget</tt>''', | '''<tt>MyWidget</tt>''' также не имеет никакого программного интерфейса, не считая конструктора. | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 110: | Line 110: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Кнопка отделена от '''<tt>LCDRange</tt>''', чтобы можно было иметь одну кнопку и несколько объектов класса '''<tt>LCDRange</tt>'''. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 116: | Line 116: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Мы создаём [http://doc.qt.nokia.com/latest/qwidget.html Qt::Widget] с компоновкой [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout], состоящей из трех столбцов. [http://doc.qt.nokia.com/latest/qgridlayout.html Qt::GridLayout] автоматически выстраивает виджеты по прямоугольной сетке; при добавлении виджета можно выбрать номера строки и столбца. | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Line 126: | Line 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Мы создаём 9 виджетов '''<tt>LCDRange</tt>''', все они заносятся в компоновку по сетке так, чтобы виджеты были расположены в 3 ряда и 3 столбца. | |||
=== | === Запуск приложения === | ||
Эта программа показывает, насколько просто одновременно использовать множество виджетов. Каждый из них ведёт себя как ползунок и ЖК-дисплей из предыдущей главы. | |||
=== | === Упражнения === | ||
Сделайте начальные положения ползунков различными (например, случайными). | |||
[[Category:Ruby]] | [[Category:Ruby/ru]] |
Latest revision as of 14:19, 18 July 2012
Серия примеров | Введение в программирование на Qt®4 на языке Ruby |
Необходимо знать | Пример 5: «Кубики» |
Следующий пример | Пример 7: Одно приводит к другому |
Литература | нет |
Больше кубиков!
Файлы:
Обзор
Этот пример показывает, как можно упаковать 2 виджета в новый компонент и как можно удобно работать с большим количеством виджетов.
require 'Qt4'
class LCDRange < Qt::Widget
def initialize(parent = nil)
super()
lcd = Qt::LCDNumber.new(2)
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
layout = Qt::VBoxLayout.new()
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
end
end
class MyWidget < Qt::Widget
def initialize(parent = nil)
super()
quit = Qt::PushButton.new(tr('Quit'))
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
grid = Qt::GridLayout.new()
for row in 0..2
for column in 0..2
grid.addWidget(LCDRange.new(), row, column)
end
end
layout = Qt::VBoxLayout.new()
layout.addWidget(quit)
layout.addLayout(grid)
setLayout(layout)
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
Построчный обзор программы
class LCDRange < Qt::Widget
Виджет LCDRange не имеет никакого программного интерфейса (API). У него есть только конструктор. Такой виджет не очень полезен, поэтому позже мы добавим в него больше возможностей.
def initialize(parent = nil)
super()
lcd = Qt::LCDNumber.new(2)
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
layout = Qt::VBoxLayout.new()
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
end
Этот код взят из конструктора класса MyWidget из 5-й главы. Единственное отличие в том, что кнопка Quit была выброшена.
class MyWidget < Qt::Widget
MyWidget также не имеет никакого программного интерфейса, не считая конструктора.
def initialize(parent = nil)
super()
quit = Qt::PushButton.new(tr('Quit'))
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
Кнопка отделена от LCDRange, чтобы можно было иметь одну кнопку и несколько объектов класса LCDRange.
grid = Qt::GridLayout.new()
Мы создаём Qt::Widget с компоновкой Qt::GridLayout, состоящей из трех столбцов. Qt::GridLayout автоматически выстраивает виджеты по прямоугольной сетке; при добавлении виджета можно выбрать номера строки и столбца.
for row in 0..2
for column in 0..2
grid.addWidget(LCDRange.new(), row, column)
end
end
Мы создаём 9 виджетов LCDRange, все они заносятся в компоновку по сетке так, чтобы виджеты были расположены в 3 ряда и 3 столбца.
Запуск приложения
Эта программа показывает, насколько просто одновременно использовать множество виджетов. Каждый из них ведёт себя как ползунок и ЖК-дисплей из предыдущей главы.
Упражнения
Сделайте начальные положения ползунков различными (например, случайными).