Программирование на языке 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 endendapp = Qt::Application.new(ARGV)wid = TimerClock.newwid.showapp.execСозданный в этом примере виджет называется
TimerClockQt::TimertimeoutupdateТаймер запускается методом
starttimeoutupdateДалее определяется метод
paintEventQt::WidgetНачиная с этого места идет сплошная геометрия. Мы создаем несколько многоугольников
Qt::PolygonЗадаются значения нескольких свойств. Устанавливаются цвета
Qt::ColorQt::ColorЧасы должны быть квадратными, поэтому в переменную
sideQt::Time.currentTimeДалее создается объект
Qt::Painterpainter.translate (width/2, height/2)Затем выполняется последовательность операций рисования. Различные геометрические преобразования (например, поворот), сопровождаются парой вызовов
painter.savepainter.restorePainterПрограмма рисует обе стрелки, предварительно повернув их на нужный угол в соответствии с текущим временем. Кроме того, мы наносим риски вдоль границы циферблата.
И напоследок мы сообщаем объекту
Painterpainter.endQt::Application
Рис. 12.10. Виджет TimerClock
12.4.6. Дополнительные замечания
Поскольку библиотека Qt написана на C++, неизбежны некоторые идиомы, отражающие ограничения этого языка. Иногда перевод на Ruby не выглядит на 100% естественным, поскольку в Ruby аналогичные вещи делаются несколько иначе. Поэтому в ряде случаев вводится избыточность, позволяющая выражать свои намерения «по-рубистски».
Например, имена методов, в которых сохранена «верблюжьяНотация», свойственная C++, можно записывать и с подчерками (_). Так, следующие два вызова эквивалентны:
Qt::Widget::minimumSizeHintQt::Widget::minimum_size_hintВсе методы установки свойств в Qt начинаются со слова
setQt::Widget::setMinimumSizewidget.setMinimumSize(50)widget.minimumSize = 50 # To же самое.widget.minimum_size = 50 # To же самое.Аналогично в Qt имена методов, возвращающих булевское значение, часто начинаются с
ishasQt::Widget::isVisibleа.isVisiblea.visible? # То же самое.12.5. Другие библиотеки для создания графических интерфейсов
Мы предупреждали, что вы можете и не найти своего любимого графического интерфейса. Но напоследок кратко упомянем имеющиеся альтернативы.
