Класс QSocketNotifier
Класс QSocketNotifier предоставляет поддержку мониторинга активности на дескрипторе файла. Подробнее...
| Заголовок: | #include <QSocketNotifier> |
| qmake: | QT += core |
| Наследуется от: | QObject |
Типы публичного доступа
| Перечисление | Тип { Чтение, Запись, Исключение } |
Функции публичного доступа
| QSocketNotifier(qintptr сокет, QSocketNotifier::Тип тип, QObject *родитель = nullptr) | |
| виртуальный | ~QSocketNotifier() |
| bool | isEnabled() const |
| qintptr | сокет() const |
| QSocketNotifier::Тип | тип() const |
Свойства публичного доступа
| void | setEnabled(bool включить) |
Сигналы
| void | activated(QSocketDescriptor сокет, QSocketNotifier::Тип тип) |
Переопределенные защищенные функции
| виртуальный bool | event(QEvent *e) override |
Подробное описание
QSocketNotifier позволяет интегрировать цикл событий Qt с другими циклами событий, основанными на дескрипторах файлов. Действие с дескриптором файла обнаруживается в основном цикле событий Qt (QCoreApplication::exec()).
После открытия устройства с помощью низкоуровневого (обычно специфичного для платформы) API вы можете создать нотификатор сокета для мониторинга дескриптора файла. Нотификатор сокета по умолчанию включен, т.е. он излучает сигнал activated() всякий раз, когда происходит событие сокета, соответствующее его типу. Подключите сигнал activated() к слоту, который вы хотите вызвать, когда произойдет событие, соответствующее типу вашего нотификатора сокета.
Существуют три типа нотификаторов сокета: чтение, запись и исключение. Тип описывается перечислением Тип и должен быть указан при создании нотификатора сокета. После создания его можно определить с помощью функции тип(). Обратите внимание, что если вам нужно отслеживать как чтение, так и запись для одного и того же дескриптора файла, необходимо создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Чтение, Запись, Исключение) на одном сокете.
Функция setEnabled() позволяет вам отключить, а также включить нотификатор сокета. В целом рекомендуется явно включать или отключать нотификатор сокета, особенно для нотификаторов записи. Отключенный нотификатор игнорирует события сокета (такой же эффект, как и при отсутствии нотификатора сокета). Используйте функцию isEnabled() для определения текущего состояния нотификатора.
Наконец, вы можете использовать функцию сокет() для получения идентификатора сокета. Хотя класс называется QSocketNotifier, он обычно используется для других типов устройств, кроме сокетов. QTcpSocket и QUdpSocket предоставляют уведомления через сигналы, поэтому обычно нет необходимости использовать QSocketNotifier на них.
См. также QFile, QProcess, QTcpSocket и QUdpSocket.
Документация по типам членов
Перечисление QSocketNotifier::Тип
Это перечисление описывает различные типы событий, которые может распознавать нотификатор сокета. Тип должен быть указан при создании нотификатора сокета.
Обратите внимание, что если вам нужно отслеживать как чтение, так и запись для одного и того же дескриптора файла, необходимо создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Чтение, Запись, Исключение) на одном сокете.
| Постоянная | Значение | Описание |
|---|---|---|
QSocketNotifier::Read |
0 |
Есть данные для чтения. |
QSocketNotifier::Write |
1 |
Данные могут быть записаны. |
QSocketNotifier::Exception |
2 |
Произошло исключение. Мы рекомендуем не использовать это. |
См. также QSocketNotifier() и тип().
Документация по функциям-членам
QSocketNotifier::QSocketNotifier(qintptr сокет, QSocketNotifier::Тип тип, QObject *родитель = nullptr)
Создает нотификатор сокета с заданным родителем. Он включает сокет и следит за событиями заданного типа.
В целом рекомендуется явно включать или отключать нотификатор сокета, особенно для нотификаторов записи.
Примечание для пользователей Windows: Сокет, переданный QSocketNotifier, станет неблокирующим, даже если он был создан как блокирующий сокет.
См. также setEnabled() и isEnabled().
[signal] void QSocketNotifier::activated(QSocketDescriptor сокет, QSocketNotifier::Тип тип)
Этот сигнал излучается всякий раз, когда нотификатор сокета включен и происходит событие сокета, соответствующее его типу.
Идентификатор сокета передается в параметре сокет.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но не может быть излучен пользователем.
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя функции Qt предоставляет удобный помощник для получения указателя функции, как показано в этом примере:
connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type>::of(&QSocketNotifier::activated),
[=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ }); Эта функция была добавлена в Qt 5.15.
[slot] void QSocketNotifier::setEnabled(bool включить)
Если включить имеет значение true, нотификатор включен; в противном случае нотификатор отключен.
Нотификатор включен по умолчанию, т.е. он излучает сигнал activated() всякий раз, когда происходит событие сокета, соответствующее его типу. Если он отключен, он игнорирует события сокета (такой же эффект, как при отсутствии нотификатора сокета).
Нотификаторы записи обычно отключаются сразу после излучения сигнала activated().
См. также isEnabled() и activated().
[virtual] QSocketNotifier::~QSocketNotifier()
Уничтожает этот нотификатор сокета.
[override virtual protected] bool QSocketNotifier::event(QEvent *e)
Переопределяет: QObject::event(QEvent *e).
bool QSocketNotifier::isEnabled() const
Возвращает true если нотификатор включен; в противном случае возвращает false.
См. также setEnabled().
qintptr QSocketNotifier::сокет() const
Возвращает идентификатор сокета, указанный в конструкторе.
См. также тип().
QSocketNotifier::Тип QSocketNotifier::тип() const
Возвращает тип события сокета, указанный в конструкторе.
См. также сокет().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qsocketnotifier.html