Сигналы и слоты (Qt)
Материал из Wiki.crossplatform.ru
ViGOur  (Обсуждение | вклад)  (→С типом соединения)  | 
		Admin  (Обсуждение | вклад)   (поправил тэг коде)  | 
		||
| (5 промежуточных версий не показаны.) | |||
| Строка 16: | Строка 16: | ||
=== Без параметров ===  | === Без параметров ===  | ||
| - | + | <source lang=cpp-qt>  | |
| - | QPushButton btn_quit = new QPushButton("Quit",wgt);  | + | QPushButton *btn_quit = new QPushButton("Quit",wgt);  | 
...  | ...  | ||
QObject::connect(btn_quit, SIGNAL(clicked()), qApp, SLOT(quit()));  | QObject::connect(btn_quit, SIGNAL(clicked()), qApp, SLOT(quit()));  | ||
| - | + | </source>  | |
В этом примере сигнал [[Qt:Документация_4.3.2/qabstractbutton#clicked|clicked()]] от кнопки '''btn_quit''' соеденяется со слотом [[Qt:Документация_4.3.2/qcoreapplication#quit|quit()]] приложения (qApp - глобальный указатель на экземпляр приложения)  | В этом примере сигнал [[Qt:Документация_4.3.2/qabstractbutton#clicked|clicked()]] от кнопки '''btn_quit''' соеденяется со слотом [[Qt:Документация_4.3.2/qcoreapplication#quit|quit()]] приложения (qApp - глобальный указатель на экземпляр приложения)  | ||
| Строка 26: | Строка 26: | ||
При соединении  сигналов и слотов с передачей параметров следует помнить замечание указанное в описании к [[Qt:Документация_4.3.2/qobject#connect|QObject::connect()]]. Т.е. имена аргументов должны быть опущены.    | При соединении  сигналов и слотов с передачей параметров следует помнить замечание указанное в описании к [[Qt:Документация_4.3.2/qobject#connect|QObject::connect()]]. Т.е. имена аргументов должны быть опущены.    | ||
| - | Неправильно:  | + | [[Изображение:Attention niels epting.svg|18px]] Неправильно:  | 
| - | + | <source lang=cpp-qt>  | |
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)), label, SLOT(setNum(int value)));  | QObject::connect(scrollBar, SIGNAL(valueChanged(int value)), label, SLOT(setNum(int value)));  | ||
| - | + | </source>  | |
Правильно:  | Правильно:  | ||
| - | + | <source lang=cpp-qt>  | |
QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));  | QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));  | ||
| - | + | </source>  | |
| - | В этом примере сигнал [[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]].  | Типы соединения и их описание вы можете посмотреть в перечислении [[Qt:Документация 4.3.2/qt#ConnectionType-enum | Qt::ConnectionType]].  | ||
Текущая версия на 15:49, 18 октября 2009
Библиотека 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.
