Spec-Zone.ru › Qt 6.1

Класс QSocketNotifier

Класс QSocketNotifier предоставляет поддержку для мониторинга активности на дескрипторе файла. Подробнее...

Заголовок: #include <QSocketNotifier>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Наследует: QObject
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Типы публичного доступа

Перечисление Тип { Чтение, Запись, Исключение }

Функции публичного доступа

QSocketNotifier(qintptr socket, QSocketNotifier::Тип type, QObject *parent = nullptr)
QSocketNotifier(QSocketNotifier::Тип type, QObject *parent = nullptr)
виртуальный ~QSocketNotifier()
bool isEnabled() const
bool isValid() const
void setSocket(qintptr socket)
qintptr socket() const
QSocketNotifier::Тип type() const

Слот публичного доступа

void setEnabled(bool enable)

Сигналы

void activated(QSocketDescriptor socket, QSocketNotifier::Тип type)

Переопределенные защищенные функции

виртуальный bool event(QEvent *e) override

Подробное описание

QSocketNotifier позволяет интегрировать цикл событий Qt с другими циклами событий, основанными на дескрипторах файлов. Действие с дескриптором файла определяется в основном цикле событий Qt (QCoreApplication::exec()).

После открытия устройства с помощью низкоуровневого (обычно специфичного для платформы) API вы можете создать нотификатор сокета для мониторинга дескриптора файла. Если дескриптор передается в конструктор нотификатора сокета, нотификатор сокета по умолчанию включен, т. е. он излучает сигнал activated() всякий раз, когда происходит событие сокета, соответствующее его типу. Подключите сигнал activated() к слоту, который вы хотите вызвать, когда произойдет событие, соответствующее типу вашего нотификатора сокета.

Вы можете создать нотификатор сокета без назначенного дескриптора. В этом случае вы должны вызвать функцию setSocket() после получения дескриптора.

Существует три типа нотификаторов сокета: чтение, запись и исключение. Тип описывается перечислением Тип и должен быть указан при создании нотификатора сокета. После создания его можно определить с помощью функции type(). Обратите внимание, что если вам необходимо отслеживать как чтение, так и запись для одного и того же дескриптора файла, вам необходимо создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Чтение, Запись, Исключение) на одном сокете.

Функция setEnabled() позволяет отключить и включить нотификатор сокета. В целом рекомендуется явно включать или отключать нотификатор сокета, особенно для нотификаторов записи. Отключенный нотификатор игнорирует события сокета (тот же эффект, что и при отсутствии нотификатора сокета). Используйте функцию isEnabled(), чтобы определить текущий статус нотификатора.

Наконец, вы можете использовать функцию socket(), чтобы получить идентификатор сокета. Хотя класс называется QSocketNotifier, он обычно используется для других типов устройств, кроме сокетов. QTcpSocket и QUdpSocket предоставляют уведомления через сигналы, поэтому обычно нет необходимости использовать QSocketNotifier на них.

См. также QFile, QProcess, QTcpSocket и QUdpSocket.

Документация по типам членов

Перечисление QSocketNotifier::Тип

Это перечисление описывает различные типы событий, которые может распознавать нотификатор сокета. Тип должен быть указан при создании нотификатора сокета.

Обратите внимание, что если вам необходимо отслеживать как чтение, так и запись для одного и того же дескриптора файла, вам необходимо создать два нотификатора сокета. Также обратите внимание, что невозможно установить два нотификатора сокета одного типа (Чтение, Запись, Исключение) на одном сокете.

Константа Значение Описание
QSocketNotifier::Read 0 Есть данные для чтения.
QSocketNotifier::Write 1 Данные могут быть записаны.
QSocketNotifier::Exception 2 Произошло исключение. Мы рекомендуем не использовать это.

См. также QSocketNotifier() и type().

Документация по функциям членов

QSocketNotifier::QSocketNotifier(qintptr socket, QSocketNotifier::Тип type, QObject *parent = nullptr)

Создает нотификатор сокета с заданным parent. Он включает socket и отслеживает события заданного type.

В целом рекомендуется явно включать или отключать нотификатор сокета, особенно для нотификаторов записи.

Примечание для пользователей Windows: Сокет, переданный QSocketNotifier, станет неблокирующим, даже если он был создан как блокирующий сокет.

См. также setEnabled() и isEnabled().

[since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Тип 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.

Идентификатор сокета передается в параметре socket.

Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может излучаться пользователем.

Примечание: Сигнал activated перегружен в этом классе. Для подключения к этому сигналу с использованием синтаксиса указателя на функцию Qt предоставляет удобный помощник для получения указателя на функцию, как показано в этом примере:

connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type>::of(&QSocketNotifier::activated),
    [=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ });

Эта функция была представлена в Qt 5.15.

См. также 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().

[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.1/qsocketnotifier.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API