Класс QSocketNotifier
Класс QSocketNotifier предоставляет поддержку мониторинга активности на дескрипторе файла. Подробнее...
| Заголовок: | #include <QSocketNotifier> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| 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().
[private signal, since 5.15] 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::socket() const
Возвращает идентификатор сокета, указанный в конструкторе.
См. также тип().
QSocketNotifier::Тип QSocketNotifier::тип() const
Возвращает тип события сокета, указанный в конструкторе.
См. также сокет().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qsocketnotifier.html