Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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) endendapp = Qt::Application.new(ARGV)widget = MyWindow.newwidget.showapp.exec
Рис. 12.9. Простое приложение Tk
В этом классе мы сначала создаем объект
Qt::GroupBoxQt::RadioButtonsQt::CheckBoxЗатем создается менеджер размещения
Qt::VBoxLayoutСледующий важный шаг — создание объекта
Qt::ButtonGroupQt::ButtonGroupbuttonClickedЭтот сигнал отличается от виденных ранее тем, что ему сопутствует аргумент, а именно объект, по которому щелкнули мышкой. Обратите внимание на то, как синтаксис —
QAbstractButton*В результате такого вызова метода
connectsomethingClickedQt::LabelQt::QBoxLayoutВнутри слота
somethingClickedЕсли встроенных виджетов недостаточно, то Qt предоставляет мощную систему рисования для создания собственных. В листинге 12.17 приведен небольшой пример, иллюстрирующий малую часть возможностей.
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)
