Книга: Программирование на языке Ruby
12.4.3. Кнопки
12.4.3. Кнопки
Создание кнопки в QtRuby сводится к созданию экземпляра класса Qt::PushButton
(см. листинг 12.14 и рис. 12.7). Обычно при нажатии кнопки нужно выполнить некоторое действие. Для этого применяется механизм событий и слотов QtRuby.
Листинг 12.14. Кнопки в QtRuby
require 'Qt'
class MyWidget < Qt::Widget
slots 'buttonClickedSlot()'
def initialize(parent = nil)
super(parent)
setWindowTitle("QtRuby example");
@lineedit = Qt::LineEdit.new(self)
@button = Qt::PushButton.new("All Caps!",self)
connect(@button, SIGNAL('clicked()'),
self, SLOT('buttonClickedSlot()'))
box = Qt::HBoxLayout.new
box.addWidget(Qt::Label.new("Text:"))
box.addWidget(@lineedit)
box.addWidget(@button)
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
, он есть почти у всех виджетов в Qt и определяет, какой виджет будет владельцем вновь создаваемого. Значение nil
означает, что это «виджет верхнего уровня», у которого нет владельца. Концепция «владения», наверное, имеет более понятный смысл в C++; родители владеют своими детьми, то есть при уничтожении или удалении родителя удаляются и все его потомки.
Наш класс создает объект Qt::LineEdit
для ввода текста и кнопку Qt::PushButton
с надписью All Caps!
. В качестве родителя каждому виджету передается self. Это означает, что создаваемый экземпляр MyWidget
«усыновляет» эти виджеты.
Далее мы обращаемся к ключевой части библиотеки Qt — механизму соединения сигналов со слотами. В классе Qt::Pushbutton
определен сигнал clicked
, который испускается при нажатии кнопки. Этот сигнал можно соединить со слотом, в данном случае с методом buttonClickedSlot
. Имя слота может быть любым, суффикс Slot
мы употребили просто для наглядности.
В самом конце мы создаем экземпляр класса Qt::HBoxLayout
. При добавлении виджетов в этот контейнер он автоматически изменяет их размеры, так что нам больше не о чем беспокоиться.
- Использование кнопки Автосумма
- Исчезла Панель задач – нет часов, свернутых программ, кнопки Пуск
- Как разместить значки возле кнопки Пуск?
- На Панели быстрого запуска возле кнопки меню Пуск вмещается всего три значка. Как увеличить ее емкость?
- В Диспетчере задач пропали все вкладки, кнопки и пункты меню
- Как одним щелчком кнопки мыши закрыть несколько окон одновременно?
- Диски С: и D: невозможно открыть простым щелчком кнопки мыши. Появляется сообщение Не найден файл file.exe. Что делать?
- Перемещение и копирование ячеек с помощью кнопки мыши
- Повторное использование анимации для кнопки в состоянии hover
- Кнопки Qt
- Кнопки и группы кнопок
- Кнопки на панели инструментов или меню