Сигналы и слоты (Qt)
Материал из Wiki.crossplatform.ru
Lit-uriy (Обсуждение | вклад) (→С параметрами) |
ViGOur (Обсуждение | вклад) (→Соединение сигналов и слотов) |
||
Строка 11: | Строка 11: | ||
* указатель на объект-получатель | * указатель на объект-получатель | ||
* слот объекта-получателя | * слот объекта-получателя | ||
+ | * тип соединения | ||
- | При соединении | + | При соединении сигналов и слотов можно передавать параметры от сигнала к слоту, если существует сответствующая пара сигнал/слот. |
=== Без параметров === | === Без параметров === | ||
Строка 35: | Строка 36: | ||
}} | }} | ||
В этом примере сигнал [[Qt:Документация_4.3.2/qabstractslider#valueChanged|valueChanged()]] от линейки прокрутки '''scrollBar''' соеденяется со слотом [[Qt:Документация_4.3.2/qlabel#setNum-2|setNum()]] текстовой метки '''label'''. Сигнал передает параметр типа ''int'' - текущая позиция ползунка. Слот метки имеет такой же тип входного аргумента. После соединения этой пары сигнал/слот, при изменении положения ползунка, в текстовой метке будет отбражатся текущая позиция ползунка. | В этом примере сигнал [[Qt:Документация_4.3.2/qabstractslider#valueChanged|valueChanged()]] от линейки прокрутки '''scrollBar''' соеденяется со слотом [[Qt:Документация_4.3.2/qlabel#setNum-2|setNum()]] текстовой метки '''label'''. Сигнал передает параметр типа ''int'' - текущая позиция ползунка. Слот метки имеет такой же тип входного аргумента. После соединения этой пары сигнал/слот, при изменении положения ползунка, в текстовой метке будет отбражатся текущая позиция ползунка. | ||
+ | |||
+ | === С типом соединения === | ||
+ | Тип соединения используется при работе с сигналами и слотами для указания как нужно доставлять сигнал слоту: немедленно или ставится в очередь, блокирует поток в котором он выполняется или нет. | ||
+ | |||
+ | Типы соединения вы можете посмотреть в перечислении [[Qt:Документация 4.3.2/qt#ConnectionType-enum | Qt::ConnectionType]]. | ||
== Объявление собственных сигналов и слотов == | == Объявление собственных сигналов и слотов == |
Версия 15:42, 28 декабря 2008
Библиотека Qt предоставляет гибкую систему уведомления и обмена данными между объектами. Эта система реализуется посредством концепции сигналов и слотов.
Содержание |
Соединение сигналов и слотов
Соединение сигналов и слотов осуществляется:
- В классах наследниках от QObject функцией connect().
- В прочих местах программы с помощью статической функциии-члена QObject::connect()
Аргументами этой функции являются:
- указатель на объект-отправитель
- сигнал объекта-отправителя
- указатель на объект-получатель
- слот объекта-получателя
- тип соединения
При соединении сигналов и слотов можно передавать параметры от сигнала к слоту, если существует сответствующая пара сигнал/слот.
Без параметров
QPushButton btn_quit = new QPushButton("Quit",wgt); ... QObject::connect(btn_quit, SIGNAL(clicked()), qApp, SLOT(quit()));
В этом примере сигнал clicked() от кнопки btn_quit соеденяется со слотом quit() приложения (qApp - глобальный указатель на экземпляр приложения)
С параметрами
При соединении сигналов и слотов с передачей параметров следует помнить замечание указанное в описании к QObject::connect(). Т.е. имена аргументов должны быть опущены.
Неправильно:
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)), label, SLOT(setNum(int value)));
Правильно:
QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
В этом примере сигнал valueChanged() от линейки прокрутки scrollBar соеденяется со слотом setNum() текстовой метки label. Сигнал передает параметр типа int - текущая позиция ползунка. Слот метки имеет такой же тип входного аргумента. После соединения этой пары сигнал/слот, при изменении положения ползунка, в текстовой метке будет отбражатся текущая позиция ползунка.
С типом соединения
Тип соединения используется при работе с сигналами и слотами для указания как нужно доставлять сигнал слоту: немедленно или ставится в очередь, блокирует поток в котором он выполняется или нет.
Типы соединения вы можете посмотреть в перечислении Qt::ConnectionType.