Класс QSocketNotifier
Класс QSocketNotifier предоставляет поддержку для мониторинга активности на дескрипторе файла. Подробнее...
| Заголовок: | #include <QSocketNotifier> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QObject |
Типы публичного доступа
| перечисление | Type { Read, Write, Exception } |
Публичные функции
| QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr) | |
| QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr) | |
| виртуальный | ~QSocketNotifier() |
| bool | isEnabled() const |
| bool | isValid() const |
| void | setSocket(qintptr socket) |
| qintptr | socket() const |
| QSocketNotifier::Type | type() const |
Публичные слоты
| void | setEnabled(bool enable) |
Сигналы
| void | activated(QSocketDescriptor socket, QSocketNotifier::Type type) |
Переопределенные защищенные функции
| виртуальный bool | event(QEvent *e) override |
Подробное описание
QSocketNotifier позволяет интегрировать цикл событий Qt с другими циклами событий, основанными на дескрипторах файлов. Действие дескриптора файла обнаруживается в основном цикле событий Qt (QCoreApplication::exec()).
После открытия устройства с помощью низкоуровневого (обычно платформозависимого) API вы можете создать нотификатор сокета для мониторинга дескриптора файла. Если дескриптор передается в конструктор нотификатора, нотификатор сокета по умолчанию включен, то есть он излучает сигнал activated() всякий раз, когда происходит событие сокета, соответствующее его типу. Подключите сигнал activated() к слоту, который вы хотите вызвать, когда произойдет событие, соответствующее типу вашего нотификатора сокета.
Вы можете создать нотификатор сокета без присвоенного дескриптора. В этом случае вы должны вызвать функцию setSocket() после получения дескриптора.
Существует три типа нотификаторов сокета: чтение, запись и исключение. Тип описывается перечислением Type, и должен быть указан при создании нотификатора сокета. После создания его можно определить с помощью функции type(). Обратите внимание, что если вам нужно отслеживать как чтение, так и запись для одного и того же дескриптора файла, вы должны создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Read, Write, Exception) на одном сокете.
Функция setEnabled() позволяет отключить, а также включить нотификатор сокета. В целом рекомендуется явно включать или отключать нотификатор сокета, особенно для нотификаторов записи. Отключенный нотификатор игнорирует события сокета (тот же эффект, что и при отсутствии нотификатора сокета). Используйте функцию isEnabled(), чтобы определить текущий статус нотификатора.
Наконец, вы можете использовать функцию socket(), чтобы получить идентификатор сокета. Хотя класс называется QSocketNotifier, он обычно используется для других типов устройств, кроме сокетов. QTcpSocket и QUdpSocket обеспечивают уведомление через сигналы, поэтому обычно нет необходимости использовать QSocketNotifier на них.
См. также QFile, QProcess, QTcpSocket и QUdpSocket.
Документация по типам членов
перечисление QSocketNotifier::Type
Это перечисление описывает различные типы событий, которые может распознавать нотификатор сокета. Тип должен быть указан при создании нотификатора сокета.
Обратите внимание, что если вам нужно отслеживать как чтение, так и запись для одного и того же дескриптора файла, вы должны создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Read, Write, Exception) на одном сокете.
| Постоянная | Значение | Описание |
|---|---|---|
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().
[since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)
Конструирует нотификатор сокета с заданным type, которому не присвоен дескриптор. Аргумент parent передается конструктору QObject.
Вызовите функцию setSocket(), чтобы установить дескриптор для мониторинга.
Эта функция была добавлена в Qt 6.1.
См. также setSocket(), isValid() и isEnabled().
[private signal, since 5.15] void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)
Этот сигнал излучается всякий раз, когда нотификатор сокета включен и происходит событие сокета, соответствующее его type.
Идентификатор сокета передается в параметре socket.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может излучаться пользователем.
Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобную функцию для получения указателя на функцию, как показано в этом примере:
connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type>::of(&QSocketNotifier::activated),
[=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ }); Эта функция была добавлена в Qt 5.15.
[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().
[since 6.1] bool QSocketNotifier::isValid() const
Возвращает true, если уведомление валидно (т.е. ему назначен дескриптор); в противном случае возвращает false.
Эта функция была добавлена в Qt 6.1.
См. также setSocket().
[since 6.1] void QSocketNotifier::setSocket(qintptr socket)
Назначает socket этому уведомлению.
Примечание: Уведомление будет отключено как побочный эффект и необходимо снова включить.
Эта функция была добавлена в Qt 6.1.
См. также socket(), setEnabled() и isValid().
qintptr QSocketNotifier::socket() const
Возвращает идентификатор сокета, назначенный этому объекту.
См. также setSocket(), isValid() и 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-6.2/qsocketnotifier.html