-->

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

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

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

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

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

Перейти на страницу:

  setLayout(box)

 end

 def buttonClickedSlot

  @lineedit.setText(@lineedit.text.upcase)

 end

end

app = Qt::Application.new(ARGV)

widget = MyWidget.new

widget.show

app.exec

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

Рис.12.7. Кнопки в Qt

В этом примере мы создали собственный класс виджета с именем

MyWidget
, он наследует классу
Qt::Widget
, являющемуся предком любого нестандартного виджета.

Перед инициализацией мы подготовили список слотов, которые будут определены в нашем классе. Слоты — это обычные методы класса, но необходимо указать их имена, чтобы во время выполнения QtRuby знала, что мы собираемся использовать их именно в качестве слотов. Метод класса

slots
принимает список строк:

slots = 'slot1()', 'slot2()'

Инициализатор класса принимает аргумент

parent
, он есть почти у всех виджетов в Qt и определяет, какой виджет будет владельцем вновь создаваемого. Значение
nil
означает, что это «виджет верхнего уровня», у которого нет владельца. Концепция «владения», наверное, имеет более понятный смысл в C++; родители владеют своими детьми, то есть при уничтожении или удалении родителя удаляются и все его потомки.

Наш класс создает объект

Qt::LineEdit
для ввода текста и кнопку
Qt::PushButton
с надписью
All Caps!
. В качестве родителя каждому виджету передается self. Это означает, что создаваемый экземпляр
MyWidget
«усыновляет» эти виджеты.

Далее мы обращаемся к ключевой части библиотеки Qt — механизму соединения сигналов со слотами. В классе

Qt::Pushbutton
определен сигнал
clicked
, который испускается при нажатии кнопки. Этот сигнал можно соединить со слотом, в данном случае с методом
buttonClickedSlot
. Имя слота может быть любым, суффикс
Slot
мы употребили просто для наглядности.

В самом конце мы создаем экземпляр класса

Qt::HBoxLayout
. При добавлении виджетов в этот контейнер он автоматически изменяет их размеры, так что нам больше не о чем беспокоиться.

12.4.4. Текстовые поля

Как видно из листинга 12.14, в QtRuby есть класс

Qt::LineEdit
для ввода одной строки текста. Для ввода нескольких строк предназначен класс
Qt::TextEdit
.

В листинге 12.15 демонстрируется многострочное текстовое поле. Под ним расположена метка, в которой отображается текущая длина текста (рис. 12.8).

Листинг 12.15. Простой редактор в Qt

require 'Qt'

class MyTextWindow < Qt::Widget

 slots 'theTextChanged()'

 def initialize(parent = nil)

  super(parent)

  @textedit = Qt::TextEdit.new(self)

  @textedit.setWordWrapMode(Qt::TextOption::WordWrap)

  @textedit.setFont( Qt::Font.new("Times", 24) )

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

  box = Qt::VBoxLayout.new

  box.addWidget(@textedit)

  box.addWidget(@status)

  setLayout(box)

  @textedit.insertPlainText("This really is an editor")

  connect(@textedit, SIGNAL('textChanged()'),

   self, SLOT('theTextChanged()'))

 end

 def theTextChanged

  text = "Length: " + @textedit.toPlainText.length.to_s

  @status.setText(text)

 end

end

app = Qt:Application.new(ARGV)

widget = MyTextWindow.new

widget.setWindowTitle("QtRuby Text Editor")

widget.show

app.exec

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

Рис. 12.8. Простой редактор в Qt

Виджет конструируется примерно так же, как в предыдущем примере. Но теперь мы создаем объект

Qt::TextEdit
, а также метку
Qt::Label
для показа текущего состояния.

Стоит отметить, что для объекта

@textedit
мы указали шрифт Times высотой 24 пункта. У каждого класса, наследующего
Qt::Widget
(в том числе и у
Qt::TextEdit
) есть свойство
font
, которое можно опросить или установить.

Затем мы создаем менеджер вертикального размещения (

Qt::QBoxLayout
), который будет контейнером для всех своих потомков, добавляем в него виджет
@textedit
и связываем сигнал
textChanged
с определенным нами слотом
theTextChanged
.

В методе

theTextChanged
мы запрашиваем у редактора текст и получаем его длину, а затем записываем возвращенное значение в метку
@status
.

Отметим, что весь механизм сигналов и слотов работает асинхронно. После того как приложение входит в цикл обработки событий (

арр.ехес
), оно уже не получает управления явно. Вот почему сигналы и слоты так важны. Мы определяем события, которые нас интересуют (сигналы), и действия, которые нужно выполнить при возникновении таких событий (слоты).

12.4.5. Прочие виджеты

В библиотеке Qt есть еще много встроенных виджетов, например переключатели, флажки и т.п. В листинге 12.16 продемонстрированы некоторые из них, а на рис. 12.9 показано, как выглядит окно приложения.

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