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