Программирование на языке Ruby
Программирование на языке 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
Рис.12.7. Кнопки в Qt
В этом примере мы создали собственный класс виджета с именем
MyWidget
Qt::Widget
Перед инициализацией мы подготовили список слотов, которые будут определены в нашем классе. Слоты — это обычные методы класса, но необходимо указать их имена, чтобы во время выполнения QtRuby знала, что мы собираемся использовать их именно в качестве слотов. Метод класса
slots
slots = 'slot1()', 'slot2()'
Инициализатор класса принимает аргумент
parent
nil
Наш класс создает объект
Qt::LineEdit
Qt::PushButton
All Caps!
MyWidget
Далее мы обращаемся к ключевой части библиотеки Qt — механизму соединения сигналов со слотами. В классе
Qt::Pushbutton
clicked
buttonClickedSlot
Slot
В самом конце мы создаем экземпляр класса
Qt::HBoxLayout
12.4.4. Текстовые поля
Как видно из листинга 12.14, в QtRuby есть класс
Qt::LineEdit
Qt::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)
end
end
app = Qt:Application.new(ARGV)
widget = MyTextWindow.new
widget.setWindowTitle("QtRuby Text Editor")
widget.show
app.exec
Рис. 12.8. Простой редактор в Qt
Виджет конструируется примерно так же, как в предыдущем примере. Но теперь мы создаем объект
Qt::TextEdit
Qt::Label
Стоит отметить, что для объекта
@textedit
Qt::Widget
Qt::TextEdit
font
Затем мы создаем менеджер вертикального размещения (
Qt::QBoxLayout
@textedit
textChanged
theTextChanged
В методе
theTextChanged
@status
Отметим, что весь механизм сигналов и слотов работает асинхронно. После того как приложение входит в цикл обработки событий (
арр.ехес
12.4.5. Прочие виджеты
В библиотеке Qt есть еще много встроенных виджетов, например переключатели, флажки и т.п. В листинге 12.16 продемонстрированы некоторые из них, а на рис. 12.9 показано, как выглядит окно приложения.