Материал из Wiki.crossplatform.ru
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия |
Ваш текст |
Строка 2: |
Строка 2: |
| | | |
| == Соединение сигналов и слотов == | | == Соединение сигналов и слотов == |
- | Соединение сигналов и слотов осуществляется:
| |
- | # В классах наследниках от [[Qt:Документация 4.3.2/qobject|QObject]] функцией [[Qt:Документация_4.3.2/qobject#connect-2|connect()]].
| |
- | # В прочих местах программы с помощью статической функциии-члена [[Qt:Документация_4.3.2/qobject#connect|QObject::connect()]]
| |
| | | |
- | Аргументами этой функции являются:
| |
- | * указатель на объект-отправитель
| |
- | * сигнал объекта-отправителя
| |
- | * указатель на объект-получатель
| |
- | * слот объекта-получателя
| |
- | * тип соединения
| |
- |
| |
- | При соединении сигналов и слотов можно передавать параметры от сигнала к слоту, если существует сответствующая пара сигнал/слот.
| |
- |
| |
- | === Без параметров ===
| |
- | <source lang=cpp-qt>
| |
- | QPushButton *btn_quit = new QPushButton("Quit",wgt);
| |
- | ...
| |
- | 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/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)));
| |
- | </source>
| |
- |
| |
- | Правильно:
| |
- | <source lang=cpp-qt>
| |
- | 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/qt#ConnectionType-enum | Qt::ConnectionType]].
| |
| | | |
| == Объявление собственных сигналов и слотов == | | == Объявление собственных сигналов и слотов == |
- |
| |
- |
| |
- | [[Категория:Qt FAQ]]
| |