-->

Программирование на языке Ruby

На нашем литературном портале можно бесплатно читать книгу Программирование на языке Ruby, Фултон Хэл-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Программирование на языке Ruby
Название: Программирование на языке Ruby
Дата добавления: 16 январь 2020
Количество просмотров: 514
Читать онлайн

Программирование на языке Ruby читать книгу онлайн

Программирование на языке Ruby - читать бесплатно онлайн , автор Фултон Хэл
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов. Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии. Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:
Листинг 12.16. Прочие виджеты в Qt

require 'Qt'

class MyWindow < Qt::Widget

 slots 'somethingClicked(QAbstractButton *)'

 def initialize(parent = nil)

  super(parent)

  groupbox = Qt::GroupBox.new("Some Radio Button",self)

  radio1 = Qt::RadioButton.new("Radio Button 1", groupbox)

  radio2 = Qt::RadioButton.new("Radio Button 2", groupbox)

  check1 = Qt::CheckBox.new("Check Box 1", groupbox)

  vbox = Qt::QBoxLayout.new

  vbox.addWidget(radio1)

  vbox.addWidget(radio2)

  vbox.addWidget(check1)

  groupbox.setLayout(vbox)

  bg = Qt::ButtonGroup.new(self)

  bg.addButton(radio1)

  bg.addButton(radio2)

  bg.addButton(check1)

  connect(bg, SIGNAL('buttonClicked(QAbscractButton *)'),

   self, SLOT('somethingClicked(QAbstractButton *)') )

  @label = Qt::Label.new(self)

  vbox = Qt::VBoxLayout.new

  vbox.addWidget(groupbox)

  vbox.addWidget(@label)

  setLayout(vbox)

 end

 def somethingClicked(who)

  @label.setText("You clicked on a " + who.className)

 end

end

app = Qt::Application.new(ARGV)

widget = MyWindow.new

widget.show

app.exec

Программирование на языке Ruby - img_9.jpeg

Рис. 12.9. Простое приложение Tk

В этом классе мы сначала создаем объект

Qt::GroupBox
— контейнер с рамкой и необязательным заголовком, в который можно помещать другие виджеты. Далее создаются два переключателя
Qt::RadioButtons
и флажок
Qt::CheckBox
, а в качестве их родителя указывается ранее созданный контейнер.

Затем создается менеджер размещения

Qt::VBoxLayout
, в который помещаются переключатели и флажок, после чего этот менеджер связывается с групповым контейнером и начинает управлять его размещением на экране.

Следующий важный шаг — создание объекта

Qt::ButtonGroup
, в который помещаются флажок и переключатели.
Qt::ButtonGroup
предназначен для логической группировки кнопок, флажков и переключателей. На их визуальное расположение он никак не влияет, зато обеспечивает, к примеру, взаимное исключение (гарантирует, что только один из группы виджетов может быть отмечен). В данном случае этот объект будет источником сигнала
buttonClicked
, который испускается при нажатии любой кнопки в группе.

Этот сигнал отличается от виденных ранее тем, что ему сопутствует аргумент, а именно объект, по которому щелкнули мышкой. Обратите внимание на то, как синтаксис —

QAbstractButton*
 — напоминает о C++-ных корнях Qt. В некоторых случаях употребления принятой в C++ нотации для обозначения типов параметров не избежать (хотя в будущих версиях это, возможно, и исправят).

В результате такого вызова метода

connect
при щелчке по любому виджету, принадлежащему группе, этот виджет будет передан слоту
somethingClicked
. Наконец, мы создаем метку
Qt::Label
, контейнер
Qt::QBoxLayout
и увязываем все вместе.

Внутри слота

somethingClicked
мы модифицируем текст метки при щелчке по любому переключателю или флажку. В данном случае выводится имя класса объекта, который испустил сигнал, приведший к вызову слота.

Если встроенных виджетов недостаточно, то Qt предоставляет мощную систему рисования для создания собственных. В листинге 12.17 приведен небольшой пример, иллюстрирующий малую часть возможностей.

Листинг 12.17. Нестандартный виджет TimerClock

require 'Qt'

class TimerClock < Qt::Widget

 def initialize(parent = nil)

  super(parent)

  @timer = Qt::Timer.new(self)

  connect(@timer, SIGNAL('timeout()'), self, SLOT('update()'))

  @timer.start(25)

  setWindowTitle('Stop Watch')

  resize(200, 200)

 end

 def paintEvent(e)

  fastHand = Qt::Polygon.new([Qt::Point.new(7, 8),

   Qt::Point.new(-7, 8),

   Qt::Point.new(0, -80)])

  secondHand = Qt::Polygon.new([Qt::Point.new(7, 8),

   Qt::Point.new(-7, 8),

   Qt::Point.new(0, -65)])

  secondColor = Qt::Color.new(100, 0, 100)

  fastColor = Qt::Color.new(0, 150, 150, 150)

  side = [width, height].min

  time = Qt::Time.currentTime

  painter = Qt::Painter.new(self)

  painter.renderHint = Qt::Painter::Antialiasing

  painter.translate(width() / 2, height() / 2)

Перейти на страницу:
Комментариев (0)
название