Сигналы и слоты - одни из ключевых компонентов, которые делают Qt особенной. Они позволяют связать события со слотами таким образом, что вы можете обработать не только нажатие кнопки, выбор флажков, редактирование текста, но и изменение значений, таймауты по таймеру и много другого.
Чтобы ваше Qt приложение что-то делало, нужно только связать сигналы со слотами. Это можно сделать тремя способами. Прошлый раз мы рассмотрели два из них; давайте повторим.
Связь по имени. В этом случае слот называется по шаблону
on_widget_signal
. Эта связь создаётся, когда вы вызываете setupUi
и связываете простые события со слотом. Имена слотов не всегда наилучшие с точки зрения читаемости и повторного использования, но зато это просто и быстро. Также этот тип связи может быть создан по правому щелчку кнопкой мышки в окне Дизайнера QtCreator'а.Связывание с использование метода
connect
. Указывая объект-источник сигнала, имя сигнала, целевой объект и имя слота, вы можете связать любой сигнал с любым слотом.И наконец, последний способ:
Связывание с использованием Дизайнера. В этом случае связи "рисуются" в Дизайнере. Этот способ и будет рассмотрен сегодня.
Раньше мы пользовались шаблоном, сгенерированным QtCreator'ом, основанном на использовании QMainWindow. В этот раз мы воспользуемся шаблоном, основанном на QWidget. Для создания такого проекта воспользуйтесь мастером по созданию Qt 4 Gui проекта и убедитесь, что используется QWidget вместо QMainWindow в качестве базового класса.
После этого перейдите к файлу
widget.ui
, дважды щёлкните по нему, чтобы открылось окно Дизайнера. Здесь, перетащите QPushButton на виджет и измените текст на ней на “Close”. Вы можете сделать правый щелчёк кнопкой мышки и выбрать изменить текст или просто щёлкнуть дважды и отредактировать текст на месте.После этого у вас будет основной виджет для дальнейшей работы. Теперь самое интересное. До сих пор вы работали в режиме редактирования виджета. Теперь настало время, чтобы изменить некоторые сигналы и слоты, для чего найдите кнопки изменения режима на панели инструментов и переключитесь в режим редактирования сигналов / слотов.
В этом рабочем режиме в Дизайнере не разрешено передвигать виджеты. Вместо этого, вы можете перетаскивающим движением (нажав и удерживая кнопку мышки) от одного виджета к другому создать связь сигнал-слот. Начните перетаскивать от
QPushButton
к QWidget
(собственно форме).Когда вы отпустите кнопку мышки, появится диалог с доступными сигналами. Выберите сигнал
clicked()
и соедините его со слотом close()
. Вам нужно будет установить флажок show signals and slots inherited from QWidget, чтобы увидеть слот.Вот и всё - вы создали связь. Сохраните файл
widget.ui
, соберите и запустите приложение и вы сможете протестировать кнопку.
Комментарии