Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
setLayout(box) end def buttonClickedSlot @lineedit.setText(@lineedit.text.upcase) endendapp = Qt::Application.new(ARGV)widget = MyWidget.newwidget.showapp.exec
Рис.12.7. Кнопки в Qt
В этом примере мы создали собственный класс виджета с именем
MyWidgetQt::WidgetПеред инициализацией мы подготовили список слотов, которые будут определены в нашем классе. Слоты — это обычные методы класса, но необходимо указать их имена, чтобы во время выполнения QtRuby знала, что мы собираемся использовать их именно в качестве слотов. Метод класса
slotsslots = 'slot1()', 'slot2()'Инициализатор класса принимает аргумент
parentnilНаш класс создает объект
Qt::LineEditQt::PushButtonAll Caps!MyWidgetДалее мы обращаемся к ключевой части библиотеки Qt — механизму соединения сигналов со слотами. В классе
Qt::PushbuttonclickedbuttonClickedSlotSlotВ самом конце мы создаем экземпляр класса
Qt::HBoxLayout12.4.4. Текстовые поля
Как видно из листинга 12.14, в QtRuby есть класс
Qt::LineEditQt::TextEditВ листинге 12.15 демонстрируется многострочное текстовое поле. Под ним расположена метка, в которой отображается текущая длина текста (рис. 12.8).
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) endendapp = Qt:Application.new(ARGV)widget = MyTextWindow.newwidget.setWindowTitle("QtRuby Text Editor")widget.showapp.exec
Рис. 12.8. Простой редактор в Qt
Виджет конструируется примерно так же, как в предыдущем примере. Но теперь мы создаем объект
Qt::TextEditQt::LabelСтоит отметить, что для объекта
@texteditQt::WidgetQt::TextEditfontЗатем мы создаем менеджер вертикального размещения (
Qt::QBoxLayout@textedittextChangedtheTextChangedВ методе
theTextChanged@statusОтметим, что весь механизм сигналов и слотов работает асинхронно. После того как приложение входит в цикл обработки событий (
арр.ехес12.4.5. Прочие виджеты
В библиотеке Qt есть еще много встроенных виджетов, например переключатели, флажки и т.п. В листинге 12.16 продемонстрированы некоторые из них, а на рис. 12.9 показано, как выглядит окно приложения.
