Aspotashev (Talk | contribs) (Created page with "Category:Ruby/ru") |
(Updating to match new version of source page) |
||
| Line 94: | Line 94: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | Этот код взят из конструктора класса '''<tt>MyWidget</tt>''' из [[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|5-й главы]]. Единственное отличие в том, что кнопка <strong>Quit</strong> была выброшена. | + | <span class="mw-translate-fuzzy"> |
| + | Этот код взят из конструктора класса '''<tt>MyWidget</tt>''' из [[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|5-й главы]]. Единственное отличие в том, что кнопка <strong>Quit</strong> была выброшена. | ||
| + | </span> | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Contents |
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
| Серия примеров | Введение в программирование на 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 столбца.
Эта программа показывает, насколько просто одновременно использовать множество виджетов. Каждый из них ведёт себя как ползунок и ЖК-дисплей из предыдущей главы.
Сделайте начальные положения ползунков различными (например, случайными).