Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
painter.scale(side / 200.0, side / 200.0)
painter.pen = Qt::NoPen
painter.brush = Qt::Brush.new(secondColor)
painter.save
painter.rotate(6.0 * time.second)
painter.drawConvexPolygon(secondHand)
painter.restore
painter.pen = secondColor
(0...12).each do |i|
painter.drawLine(88, 0, 96, 0)
painter.rotate(30.0)
end
painter.pen = Qt::NoPen
painter.brush = Qt::Brush.new(fastColor)
painter.save
painter.rotate(36.0 * (time.msec / 100.0))
painter.drawConvexPolygon(fastHand)
painter.restore
painter.pen = fastColor
(0...60).each do |j|
if (j % 5) != 0
painter.drawLine(92, 0, 96, 0)
end
painter.rotate(6.0)
end
painter.end
end
end
app = Qt::Application.new(ARGV)
wid = TimerClock.new
wid.show
app.exec
Созданный в этом примере виджет называется
TimerClock
Qt::Timer
timeout
update
Таймер запускается методом
start
timeout
update
Далее определяется метод
paintEvent
Qt::Widget
Начиная с этого места идет сплошная геометрия. Мы создаем несколько многоугольников
Qt::Polygon
Задаются значения нескольких свойств. Устанавливаются цвета
Qt::Color
Qt::Color
Часы должны быть квадратными, поэтому в переменную
side
Qt::Time.currentTime
Далее создается объект
Qt::Painter
painter.translate (width/2, height/2)
Затем выполняется последовательность операций рисования. Различные геометрические преобразования (например, поворот), сопровождаются парой вызовов
painter.save
painter.restore
Painter
Программа рисует обе стрелки, предварительно повернув их на нужный угол в соответствии с текущим временем. Кроме того, мы наносим риски вдоль границы циферблата.
И напоследок мы сообщаем объекту
Painter
painter.end
Qt::Application
Рис. 12.10. Виджет TimerClock
12.4.6. Дополнительные замечания
Поскольку библиотека Qt написана на C++, неизбежны некоторые идиомы, отражающие ограничения этого языка. Иногда перевод на Ruby не выглядит на 100% естественным, поскольку в Ruby аналогичные вещи делаются несколько иначе. Поэтому в ряде случаев вводится избыточность, позволяющая выражать свои намерения «по-рубистски».
Например, имена методов, в которых сохранена «верблюжьяНотация», свойственная C++, можно записывать и с подчерками (_). Так, следующие два вызова эквивалентны:
Qt::Widget::minimumSizeHint
Qt::Widget::minimum_size_hint
Все методы установки свойств в Qt начинаются со слова
set
Qt::Widget::setMinimumSize
widget.setMinimumSize(50)
widget.minimumSize = 50 # To же самое.
widget.minimum_size = 50 # To же самое.
Аналогично в Qt имена методов, возвращающих булевское значение, часто начинаются с
is
has
Qt::Widget::isVisible
а.isVisible
a.visible? # То же самое.
12.5. Другие библиотеки для создания графических интерфейсов
Мы предупреждали, что вы можете и не найти своего любимого графического интерфейса. Но напоследок кратко упомянем имеющиеся альтернативы.