Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06/ru: Difference between revisions

From KDE TechBase
(Updating to match new version of source page)
(Updating to match new version of source page)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<languages />
<languages />


{{Template:I18n/Language Navigation Bar|Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06}}
 


{{TutorialBrowser/ru|
{{TutorialBrowser/ru|
Line 94: Line 94:
</syntaxhighlight>
</syntaxhighlight>


<span class="mw-translate-fuzzy">
Этот код взят из конструктора класса '''<tt>MyWidget</tt>''' из [[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|5-й главы]]. Единственное отличие в том, что кнопка <strong>Quit</strong> была выброшена.  
Этот код взят из конструктора класса '''<tt>MyWidget</tt>''' из [[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial/Chapter_05|5-й главы]]. Единственное отличие в том, что кнопка <strong>Quit</strong> была выброшена.
</span>


<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">

Latest revision as of 14:19, 18 July 2012

Other languages:


Больше кубиков!
Серия примеров   Введение в программирование на 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 столбца.

Запуск приложения

Эта программа показывает, насколько просто одновременно использовать множество виджетов. Каждый из них ведёт себя как ползунок и ЖК-дисплей из предыдущей главы.

Упражнения

Сделайте начальные положения ползунков различными (например, случайными).