WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Сигналы и слоты — подход, используемый в некоторых языках программирования и библиотеках (например, Boost и Qt) который позволяет реализовать шаблон «наблюдатель», минимизируя написание повторяющегося кода. Концепция заключается в том, что компонент (часто виджет) может посылать сигналы, содержащие информацию о событии (например: был выделен текст «слово», была открыта вторая вкладка). В свою очередь другие компоненты могут принимать эти сигналы посредством специальных функций — слотов. Система сигналов и слотов хорошо подходит для описания Графического интерфейса пользователя. Также механизм сигналов/слотов может быть применён для асинхронного ввода-вывода (включая сокеты, pipe, устройства с последовательным интерфейсом, др.) или уведомления о событиях. В библиотеке Qt благодаря Метаобъектному компилятору отпадает необходимость писать код регистрации/дерегистрации/вызова, так как эти шаблонные участки кода генерируются автоматически.

Альтернативные подходы

Существуют реализации системы сигналов/слотов на основе шаблонов C++. Их преимущество в отсутствии необходимости использовать Метаобъектный компилятор, как это реализовано в Qt.

Примеры:

В языке программирования C# есть похожая конструкция с другой терминологией и синтаксисом: события играют роль сигналов, а делегаты — роль слотов. Другая реализация сигналов существует для ActionScript 3.0, основанная на событиях из C# и сигналах/слотах из Qt. Дополнительно, делегатом может быть локальная переменная или указатель на функцию, в то время как в Qt слотом может быть только специально объявленный метод класса. Из-за ограничений языка, нет общей реализации для ANSI C. Но существует ограниченный вариант — c-sigslot.

Сигналы и слоты в Qt (C++)

Создать сигнал в классе можно так:

class A : public QObject
{
    Q_OBJECT
public:
    A();
signals:
    void someSignal();
    /* ... */
};

Слот можно создать так:

class B : public QObject
{
    Q_OBJECT
public:
    B();
public slots:
    void someSlot();
    /*...*/
};

Чтобы соединить сигнал и слот:

A classA();
B classB();
 
QObject::connect(&classA, SIGNAL(someSignal(int)), &classB, SLOT(someSlot(int)));

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии